我想将DataTable传递给创建临时表的Oracle过程。 甚至我的程序也需要更改以接受数据表作为参数。 我想用数据表代替现存的表。
以下是过程:
CREATE OR REPLACE procedure temptable
is
begin
EXECUTE IMMEDIATE'CREATE GLOBAL TEMPORARY TABLE TEMP_TABLE
ON COMMIT PRESERVE ROWS
AS
select * from existing_table';
End;
我该如何处理。请帮忙!
答案 0 :(得分:1)
以下是您如何执行此操作的示例:
SQL> create or replace procedure temptable (par_table_name in varchar2)
2 is
3 l_cnt number;
4 l_str varchar2(200);
5 begin
6 -- if TEMP_TABLE already exists, drop it
7 select count(*)
8 into l_cnt
9 from user_tables
10 where table_name = 'TEMP_TABLE';
11
12 if l_cnt > 0 then
13 execute immediate 'drop table temp_table';
14 end if;
15
16 -- create a new TEMP_TABLE
17 l_str := 'create global temporary table temp_table on commit preserve rows ' ||
18 'as select * from ' || par_table_name;
19 execute immediate (l_str);
20 end;
21 /
Procedure created.
SQL> exec temptable('dept');
PL/SQL procedure successfully completed.
SQL> select * from temp_table;
DEPTNO DNAME LOC
---------- -------------------- --------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
但是,在Oracle中,您并不是真正地动态地创建/删除表-您只需创建一次并多次使用它们。对于全局临时表,只需创建一次,然后根据需要在不同的会话中进行填充。
可能有您的要求(即对于不同的数据源使用相同的表名),所以-如果您的情况如此,请查看上面的代码是否有帮助。