【发布时间】:2013-01-12 03:14:21
【问题描述】:
调用存储过程的客户端只能处理记录集输出。
然而,存储过程应该返回简单的 0 或 1 值作为多个内部查询的结果。
是否有任何解决方法可以让存储过程变量值作为一种记录集返回?
【问题讨论】:
-
在这里查看在 Oracle 中返回记录集的清晰示例:stackoverflow.com/questions/14305883/…
标签: oracle stored-procedures plsql
调用存储过程的客户端只能处理记录集输出。
然而,存储过程应该返回简单的 0 或 1 值作为多个内部查询的结果。
是否有任何解决方法可以让存储过程变量值作为一种记录集返回?
【问题讨论】:
标签: oracle stored-procedures plsql
返回一个游标变量;使用 SELECT .. FROM DUAL 打开游标变量,其中包含要从过程中返回的值。
该过程将返回一个游标,该游标返回包含这些值的单行。
【讨论】:
从你的程序做
OPEN resultsCursor_ FOR
Select 1 As aValue FROM DUAL;
或
CREATE OR REPLACE PROCEDURE GetAValue
(
results_ OUT SYS_REFCURSOR
)
IS
MY_COUNT_ INT;
BEGIN
MY_COUNT_ := 10;
OPEN results_ FOR
SELECT MY_COUNT_ AS MyCount FROM DUAL;
END GetAValue;
【讨论】:
过程不能返回值;您需要一个函数来执行此操作。
如果你真的想要一个过程将光标“返回”给调用者,你可以 使用这样的东西:
--Declare this type in a package X
--The caller must have access to the package X.
TYPE ref_cursor IS REF CURSOR;
CREATE OR REPLACE
PROCEDURE test (
p_param1 IN VARCHAR2,
p_cur OUT X.REF_CURSOR,
p_error_code OUT NUMBER,
p_error_message OUT VARCHAR2
)
AS
BEGIN
OPEN p_cur FOR
SELECT * FROM TABLE;
EXCEPTION
WHEN OTHERS THEN
p_error_code := SQLCODE;
p_error_message := SQLERRM;
END;
如果没有设置错误,则调用者可以执行此游标并针对它获取行。
【讨论】: