调用存储过程的客户端只能处理记录集输出。
但是,由于多次内部查询,存储过程应该返回简单的0或1值。
是否有任何解决方法我可以将一个存储过程变量值作为一种记录集返回?
答案 0 :(得分:1)
返回一个游标变量;使用要从过程返回的值的SELECT .. FROM DUAL打开游标变量。
该过程将返回一个返回包含这些值的单行的游标。
答案 1 :(得分:1)
从你的程序做起
OPEN resultsCursor_ FOR
Select 1 As aValue FROM DUAL;
OR
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;
答案 2 :(得分:0)
程序无法返回值;你需要一个功能来做到这一点。
如果你真的想要一个程序来"给"一个光标回到调用者,你可以 使用这样的东西:
--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;
如果没有设置错误,则调用者可以执行此游标并针对它获取行。