【问题标题】:ORA-01422: exact fetch returns more than requested number of rows in functionORA-01422: 精确提取返回的行数超过了函数中请求的行数
【发布时间】:2021-06-14 19:25:12
【问题描述】:

Select 语句在resault 中返回多行。是否可以使用此功能获得所有行?

CREATE OR REPLACE PACKAGE PKG_EMP AS

    TYPE measure_record IS RECORD(
       ename VARCHAR2(50), 
       sal VARCHAR2(50), 
       empno number);

    TYPE measure_table IS TABLE OF measure_record;

    FUNCTION get_emp(id NUMBER)
        RETURN measure_table
        PIPELINED;
END;

CREATE OR REPLACE PACKAGE BODY PKG_EMP AS

    FUNCTION get_emp(id number)
        RETURN measure_table
        PIPELINED IS

        rec  measure_record;

    BEGIN
        SELECT ename, sal, empno
          INTO rec
          FROM emp where deptno = id;   
        PIPE ROW (rec);
       

    RETURN;
    END get_emp;
END;

SELECT * FROM table(PKG_EMP.get_ups(30));

ORA-01422:精确提取返回的行数超过了请求的行数

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    SELECT ... INTO ... FROM ... 用于单行。

    如果你想要多行,那么:

    • 使用SELECT ... BULK COLLECT INTO ... FROM ...并遍历集合;或
    • 使用游标并遍历行集。

    例如:

    CREATE OR REPLACE PACKAGE BODY PKG_EMP AS
      FUNCTION get_emp(
        id number
      ) RETURN measure_table PIPELINED
      IS
        rec  measure_table;
      BEGIN
        SELECT ename, sal, empno
        BULK COLLECT INTO rec
        FROM emp where deptno = id;   
    
        FOR i IN 1 .. rec.COUNT LOOP
          PIPE ROW (rec(i));
        END LOOP;
      END get_emp;
    END;
    /
    

    那么,对于样本数据:

    CREATE TABLE emp ( empno, ename, sal, deptno ) AS
    SELECT 1, 'Alice', 200, 30 FROM DUAL UNION ALL
    SELECT 2, 'Beryl', 300, 30 FROM DUAL UNION ALL
    SELECT 3, 'Carol', 150, 30 FROM DUAL;
    

    如果这样做(调用包函数时有错字):

    SELECT * FROM table(PKG_EMP.get_emp(30));
    

    输出:

    姓名 |萨尔 | EMPNO :---- | :-- | ----: 爱丽丝 | 200 | 1 绿柱石 | 300 | 2 卡罗尔 | 150 | 3

    db小提琴here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 2019-01-27
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多