如何在过程中返回一个oracle表
Posted
技术标签:
【中文标题】如何在过程中返回一个oracle表【英文标题】:how to return a oracle table in a procedure 【发布时间】:2016-04-20 10:03:00 【问题描述】:我有一个调用函数的过程。此函数返回一个表,现在在程序中我要选择整个表。我正在做这个 atm,我得到了未初始化的集合。
procedure check_all (
p_period IN RPT_EXT.PERIOD%type default rptsum_time - 1/24/12,
p_days IN NUMBER default 1/24/12,
p_data_ext IN VARCHAR2 default DATA_EXT_DE2,
p_ext_no IN TWS_DIMENSION_DEFINES.EXT_NO%type default null,
p_record_id IN RPT_EXT.RECORD_ID%type default null
)
as
sql_statement varchar2(200);
tab extraction_count_tab;
begin
tab := extraction_counts( p_period , p_days, p_data_ext, p_ext_no, p_record_id);
sql_statement := 'select* from tab';
execute immediate sql_statement; -- need to chacnge this
dbms_output.put_line(chr(10));
performance_check(p_period, p_days, p_data_ext);
end check_all;
【问题讨论】:
然后选择什么? 你想遍历那个表吗? 【参考方案1】:不知道你想实现什么...
你喜欢使用来自select * from tab
的所有记录来调用过程performance_check
吗?
那么你应该考虑使用这样的for循环:
for rec in (
select * from tab
)
loop
performance_check(rec.columnA, rec.columnB, ...)
end loop;
或者performance_check
应该返回一张您喜欢使用的表格吗?
在这种情况下,您必须从过程切换到表函数,无论是普通函数还是流水线函数。
有关文档或 f.e.,请参阅 https://docs.oracle.com/cd/B28359_01/appdev.111/b28425/pipe_paral_tbl.htm。 https://oracle-base.com/articles/misc/pipelined-table-functions 一些样品。
【讨论】:
【参考方案2】:实际上它非常不清楚你想尝试什么,但我试图复制这个场景。希望能帮助到你。我没有工作区,如果有任何语法错误请见谅。
PROCEDURE check_all(
p_period IN RPT_EXT.PERIOD%type DEFAULT rptsum_time - '1/24/12',
p_days IN NUMBER DEFAULT '1/24/12',
p_data_ext IN VARCHAR2 DEFAULT DATA_EXT_DE2,
p_ext_no IN TWS_DIMENSION_DEFINES.EXT_NO%type DEFAULT NULL,
p_record_id IN RPT_EXT.RECORD_ID%type DEFAULT NULL )
AS
sql_statement VARCHAR2(200);
tab extraction_count_tab;
BEGIN
tab := extraction_counts( p_period , p_days, p_data_ext, p_ext_no, p_record_id);
sql_statement := 'select * from TABLE(tab)';
EXECUTE immediate sql_statement BULK COLLECT INTO tab; -- need to chacnge this
dbms_output.put_line(chr(10));
performance_check(p_period, p_days, p_data_ext);
END check_all;
【讨论】:
以上是关于如何在过程中返回一个oracle表的主要内容,如果未能解决你的问题,请参考以下文章