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

时间:2014-11-05 22:39:25

标签: database oracle join

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

  1. 包含invoice_ID和invoice_line_ID
  2. 的表头
  3. 地址行表包含invoice_line_id和' Ship_From'并且' Ship_To'对应于标头表中的每个invoice_line_ID。 3.地址标题表包含invoice_ID和' Ship_From'并且' Ship_To'对应于标题表中的每个invoice_id。
  4. 案件并非总是所有' Ship_From'并且' Ship_To'信息将出现在地址行表中。在这种情况下,需要从地址标题表中选择信息。

    所以我将编写一个案例结构和两个连接:1。这将连接Header表和Address Line表 那将加入Header表和Address Header表。 如果条件表中没有特定invoice_line_id的完整信息,则执行第二次连接的条件。

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

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

1 个答案:

答案 0 :(得分:0)

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

这是使用游标的简单示例。至于我,它在你的情况下比临时表更匹配。