我需要在oracle中创建一个函数,接受一个表名并返回一个集合,其内容基于接受的表。
我一直在做一些搜索,很多例子的形式如下:首先,定义一个表类型;然后,填写该类型的表并将其返回。
但我不知道在调用函数之前需要返回的集合的结构,所以在编程时我无法定义表类型。
我该怎么做?感谢: - )
我想做的是: 说,我有三个表 - TABLE_A,TABLE_B,TABLE_C - 每个表都有不同的列。现在我需要创建一个接受表名(TABLE_A,TABLE_B或TABLE_C)的函数func(table_name),并返回一个集合,其内容由传递给函数的表名决定。由于这三个表有不同的列,我无法创建类似" TColumnData"你创建的。那么,该怎么写函数呢?
答案 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;