Select语句在Resault中返回多行。是否可以用此函数获得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:精确提取返回的行数多于请求的行数
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;
sql prettyprint-override">SELECT * FROM table(PKG_EMP.get_emp(30));
ENAME | SAL | EMPNO :---- | :-- | ----: Alice | 200 | 1 Beryl | 300 | 2 Carol | 150 | 3
db<>在这里摆弄
在第1行声明 * 错误: ORA-01422:精确提取返回的行数超过请求的行数 ORA-06512:在第11行 这是我的代码。
剧本: 新的SQL和PL/SQL,所以我将感谢任何帮助。
ORA-06512:在“sys.dbms_sql”处,第1721行 我确信这个函数的结果只有一行,我不想使用。
我很难理解PL/SQL触发器的问题所在。错误为:错误报告-SQL错误:ORA-01422:精确提取返回的行数超过请求的行数ORA-06512:在“System.trg_late_return”处,第6行ORA-04088:触发器“System.trg_late_return”执行过程中的错误01422。00000-“精确提取返回的行数超过请求的行数”*原因:精确提取中指定的行数小于返回的行数。*操
问题内容: 是否可以获取从调用范围返回函数的行号? 例: 我认为这是不可能的,因为它应该已经从堆栈中删除了,但是也许它仍然被缓存在某个地方? 用例是我有一个HTTP处理程序,我想记录返回错误的行和文件名,而不必乱扔代码。 问题答案: AFAIK,不可能自动获取执行最后一次返回的行。 但是,有了一个小帮手,您可以拥有: 操场 输出: