【问题标题】:how to return a oracle table in a procedure如何在过程中返回一个oracle表
【发布时间】: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;

【问题讨论】:

  • 然后选择什么?
  • 你想遍历那个表吗?

标签: sql oracle stored-procedures plsql sqlplus


【解决方案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.htmhttps://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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      相关资源
      最近更新 更多