将DataTable传递给Oracle Procedur

时间:2018-11-05 07:52:13

标签: oracle datatable procedure

我想将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;

我该如何处理。请帮忙!

1 个答案:

答案 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中,您并不是真正地动态地创建/删除表-您只需创建一次并多次使用它们。对于全局临时表,只需创建一次,然后根据需要在不同的会话中进行填充。

可能有您的要求(即对于不同的数据源使用相同的表名),所以-如果您的情况如此,请查看上面的代码是否有帮助。