use*_*310 -1 oracle plsql temp-tables oracle10g
我有一个PL/SQL过程,它创建一个临时表,然后使用游标从此临时表中提取数据,处理数据,然后删除临时表.但是,如果数据库中不存在表,则Oracle不允许使用游标.
请帮我处理这件事.
你的陈述不太正确.您可以将游标用于几乎任意的查询.见下文:
create or replace procedure fooproc
IS
type acursor is ref cursor;
mycur acursor;
mydate date;
BEGIN
execute immediate 'create global temporary table footmp (bar date) on commit delete rows';
execute immediate 'insert into footmp values (SYSDATE)';
open mycur for 'select * from footmp';
loop
fetch mycur into mydate;
exit when mycur%notfound;
dbms_output.put_line(mydate);
end loop;
close mycur;
execute immediate 'drop table footmp';
END fooproc;
/
Run Code Online (Sandbox Code Playgroud)
(这里有更多细节- 特别是这个简短的过程根本不安全,因为表名是固定的而不是与会话相关的).
它(相当)有点难看,我并不建议你使用它 - 相反,你应该考虑是否需要特定于程序的临时表.
看到这篇文章:
不要动态创建它们[临时表],请不要动态创建它们,请 - 不要动态创建它们.
你不能使用全局临时表吗?你真的需要临时桌吗?(即,在用于填充该表工作的select语句中不使用游标?)