存储过程及其输出

时间:2013-01-11 18:26:12

标签: oracle stored-procedures plsql

调用存储过程的客户端只能处理记录集输出。

但是,由于多次内部查询,存储过程应该返回简单的0或1值。

是否有任何解决方法我可以将一个存储过程变量值作为一种记录集返回?

3 个答案:

答案 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;

如果没有设置错误,则调用者可以执行此游标并针对它获取行。