【问题标题】:How to use WITH Clause in BULK COLLECET inside plsql如何在pl sql中的BULK COLLECT中使用WITH子句
【发布时间】:2021-04-22 11:15:57
【问题描述】:

我想知道如何在 PL/SQL 块内的BULK COLLECT 中使用WITH 子句。

目前我可以将数据放入如下的集合变量中。

set serveroutput on;
declare
    type row_data is table of varchar2(256) ;
    row_d row_data;
begin
    select some_column bulk collect into row_d from some_table;
    dbms_output.put_line(row_d(1));
end;

但我需要从不同的表中获取数据。为此,我使用下面提到的 with 子句。

with diff_tab_data as
(
select some_column from some_table1;
union all
select some_column from some_table2;
union all
select some_column from some_table3;
union all
select some_column from some_table4;
union all
select some_column from some_table5;
);
select some_column from diff_tab_data;

如何将上述查询与批量收集一起使用。我已经尝试了以下相同的方法,但我收到了错误

set serveroutput on;
declare
    type row_data is table of varchar2(256) ;
    row_d row_data;
begin
    with diff_tab_data as
    (
    select some_column from some_table1
    union all
    select some_column from some_table2
    union all
    select some_column from some_table3
    union all
    select some_column from some_table4
    union all
    select some_column from some_table5
    );
    select some_column into bulk collect row_d from diff_tab_data;
    dbms_output.put_line(row_d(1));
end;

请求您在这方面提供帮助

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    基于 Scott 样本表的示例:

    SQL> DECLARE
      2     TYPE row_data IS TABLE OF VARCHAR2 (256);
      3
      4     row_d  row_data;
      5  BEGIN
      6     WITH
      7        diff_tab_data (col)
      8        AS
      9           (SELECT dname FROM dept
     10            UNION ALL
     11            SELECT ename FROM emp
     12            UNION ALL
     13            SELECT loc FROM dept
     14            UNION ALL
     15            SELECT job FROM emp
     16            UNION ALL
     17            SELECT dummy FROM DUAL)
     18     SELECT col
     19       BULK COLLECT INTO row_d
     20       FROM diff_tab_data;
     21
     22     DBMS_OUTPUT.put_line (row_d (1));
     23  END;
     24  /
    ACCOUNTING
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    如您所见,with 因式分解子句中的每个select以语句终止符结尾。其余部分,您大部分都做得很好(缺少bulk collect)。

    【讨论】:

    • 谢谢。这是我愚蠢的错误。它正在工作。
    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    相关资源
    最近更新 更多