【问题标题】:Store GROUP BY result in a variable in Oracle PL/SQL将 GROUP BY 结果存储在 Oracle PL/SQL 中的变量中
【发布时间】:2020-11-02 07:46:24
【问题描述】:

我可以使用下面的代码将一组行存储在变量类型为表的变量中。

DECLARE
    TYPE TABLE_A_ROW_TYPE IS TABLE OF TABLE_A%ROWTYPE ;
    TABLE_A_ROWS_LIST TABLE_A_ROW_TYPE ;
BEGIN
    SELECT * BULK COLLECT INTO TABLE_A_ROWS_LIST FROM TABLE_A
    WHERE ORG_MEMBER_NAME is NULL;
END;

我的要求是将GROUP BY 子句的结果存储在变量中。而不是SELECT * 我需要使用以下查询:

SELECT ORG_NAME, COUNT(1) BULK COLLECT INTO TABLE_A_ROWS_LIST FROM TABLE_A
WHERE ORG_MEMBER_NAME is NULL GROUP BY ORG_NAME;

如何将上述GROUP BY 子句的结果存储到变量中?我应该为TABLE_A_ROWS_LIST 变量使用什么变量类型才能使其工作?

【问题讨论】:

    标签: sql oracle plsql sql-insert


    【解决方案1】:

    这是一种选择:

    SQL> DECLARE
      2     TYPE ttar IS RECORD
      3     (
      4        org_name   VARCHAR2 (10),
      5        cnt        NUMBER
      6     );
      7
      8     TYPE ttav IS VARRAY (10) OF ttar;
      9
     10     ttab  ttav;
     11  BEGIN
     12       SELECT d.dname, COUNT (*)
     13         BULK COLLECT INTO ttab
     14         FROM dept d JOIN emp e ON e.deptno = d.deptno
     15     GROUP BY d.dname;
     16
     17     FOR i IN ttab.FIRST .. ttab.LAST
     18     LOOP
     19        DBMS_OUTPUT.put_line (ttab (i).org_name || ': ' || ttab (i).cnt);
     20     END LOOP;
     21  END;
     22  /
    ACCOUNTING: 3
    RESEARCH: 5
    SALES: 6
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    或者,使用在 SQL 级别声明的类型:

    SQL> CREATE OR REPLACE TYPE ttar IS OBJECT (org_name VARCHAR2 (10), cnt NUMBER);
      2  /
    
    Type created.
    
    SQL> CREATE OR REPLACE TYPE ttabr IS TABLE OF ttar;
      2  /
    
    Type created.
    
    SQL> DECLARE
      2     ttab  ttabr;
      3  BEGIN
      4       SELECT ttar (d.dname, COUNT (*))
      5         BULK COLLECT INTO ttab
      6         FROM dept d JOIN emp e ON e.deptno = d.deptno
      7     GROUP BY d.dname;
      8
      9     FOR i IN ttab.FIRST .. ttab.LAST
     10     LOOP
     11        DBMS_OUTPUT.put_line (ttab (i).org_name || ': ' || ttab (i).cnt);
     12     END LOOP;
     13  END;
     14  /
    ACCOUNTING: 3
    RESEARCH: 5
    SALES: 6
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2021-01-26
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多