Oracle我应该使用临时表还是引用游标



我有以下场景,必须为其编写存储过程:

  1. 包含invoice_ID和invoice_line_ID的头表
  2. 地址行表,包含invoice_Line_id和"Ship_From"one_answers"Ship_To",对应于头表中的每个invoice-Line_id。3.地址头表,包含头表中每个invoice_ID对应的invoice_ID和"Ship_From"one_answers"Ship_To"

这种情况下,地址行表中并不总是显示所有的"Ship_From"one_answers"Ship_To"信息。在这种情况下,需要从地址头表中选择信息。

因此,我将写一个案例结构和两个连接:1。这将连接标题表和地址行表2.这将连接Header表和Address Header表。条件是在特定invoice_line_id的全部信息在行表中不可用的情况下进行第二次联接。

我的问题是我应该把信息存储在哪里?我将使用光标来执行上面的案例结构。但是在这种情况下,我应该使用ref游标还是临时表?

请注意,我的客户不喜欢在数据库中添加额外的数据库对象,所以我可能不得不在显示完临时表后删除它。我需要这方面的帮助,以及是否有任何替代临时表的方法,或者ref游标是否占用数据库上的额外空间。

在您的情况下,不应该使用临时表。这种表格与普通表格差别不大。它是一个对象,始终存在于数据库中。如果你想每次都创建和删除它,你需要解决很多问题。如果两个用户同时使用一个数据库,您需要检查它是否已经由另一个用户创建。或者您需要确保,每个用户都将创建一个具有唯一名称的表。您需要一种机制来删除未正确删除的表,例如,当用户会话因网络问题而中止时。还有许多其他问题。这不是使用oracle临时表的方法。

UPD

关于refcursors。

declare
  my_cursor sys_refcursor;
  num number;
begin
  open my_cursor for select rownum from dual;
  loop
    fetch my_cursor into num;
    exit when my_cursor%notfound;
    -- do something else
  end loop;
end;
/

这是一个使用游标的简单示例。对我来说,它比临时桌子更适合你的情况。

最新更新