如何在不事先了解其结构的情况下返回表格?

时间:2014-06-23 09:33:07

标签: oracle plsql

我需要在oracle中创建一个函数,接受一个表名并返回一个集合,其内容基于接受的表。

我一直在做一些搜索,很多例子的形式如下:首先,定义一个表类型;然后,填写该类型的表并将其返回。

但我不知道在调用函数之前需要返回的集合的结构,所以在编程时我无法定义表类型。

我该怎么做?感谢: - )

我想做的是: 说,我有三个表 - TABLE_A,TABLE_B,TABLE_C - 每个表都有不同的列。现在我需要创建一个接受表名(TABLE_A,TABLE_B或TABLE_C)的函数func(table_name),并返回一个集合,其内容由传递给函数的表名决定。由于这三个表有不同的列,我无法创建类似" TColumnData"你创建的。那么,该怎么写函数呢?

1 个答案:

答案 0 :(得分:0)

一种方法是使用全局临时表。

    create or replace 
    procedure test_procedure(table_name varchar2) as
    begin
      declare
        table_or_view_not_exist exception;
        pragma exception_init(table_or_view_not_exist, -942);

      begin    
        begin
         EXECUTE IMMEDIATE 'truncate TABLE TEMP_TABLE';
         EXECUTE IMMEDIATE 'DROP TABLE TEMP_TABLE';
        exception when table_or_view_not_exist then
             DBMS_OUTPUT.PUT_LINE('Table TEMP_TABLE not found. skipping drop..');
        end;
      EXECUTE IMMEDIATE 
                        'CREATE GLOBAL TEMPORARY TABLE TEMP_TABLE ON COMMIT PRESERVE ROWS AS 
                         SELECT * FROM ' || table_name || ' ';
      end;
    end test_procedure;

然后运行程序:

    execute test_procedure('TABLE_A');

程序完成执行后,您可以通过以下方式进行验证:

    select * from temp_table;