首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按结果存储Oracle /SQL中的变量组

问按结果存储Oracle /SQL中的变量组
EN

Stack Overflow用户
提问于 2020-11-02 07:46:24
回答 1查看 492关注 0票数 0

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

代码语言:javascript
复制
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 *:

代码语言:javascript
复制
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变量正常工作,我应该使用什么变量类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-02 08:03:09

这里有一个选择:

代码语言:javascript
复制
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级别声明的类型:

代码语言:javascript
复制
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>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64641581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档