我有以下场景,我必须编写一个存储过程:
案件并非总是所有' Ship_From'并且' Ship_To'信息将出现在地址行表中。在这种情况下,需要从地址标题表中选择信息。
所以我将编写一个案例结构和两个连接:1。这将连接Header表和Address Line表 那将加入Header表和Address Header表。 如果条件表中没有特定invoice_line_id的完整信息,则执行第二次连接的条件。
我的问题是我应该在哪里存储信息?我将使用游标来执行上述案例结构。但在这种情况下我应该使用引用游标还是临时表?
请注意,我的客户不喜欢数据库中额外数据库对象的想法,所以在完成显示后我可能不得不删除临时表。我需要帮助,以及是否有临时表的替代方法,或者ref游标是否占用了数据库上的额外空间。
答案 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;
/
这是使用游标的简单示例。至于我,它在你的情况下比临时表更匹配。