从存储过程返回布尔值作为out参数?

时间:2018-05-03 10:07:15

标签: oracle plsql oracle12c

这是从存储过程返回布尔值作为输出参数的有效方法吗?如果一切正常,则返回true,或者在发生错误时引发异常。

PROCEDURE STUFF (VAL1 IN NUMBER, VAL2 IN NUMBER, RESULT OUT BOOLEAN)
IS
BEGIN
    INSERT INTO TABLE_1 (A_COLUMN) VALUES (VAL1);
    INSERT INTO TABLE_2 (B_COLUMN) VALUES (VAL2);
    COMMIT;
    RESULT := TRUE;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
//Do stuff;
RAISE;
END;

2 个答案:

答案 0 :(得分:2)

如果正确使用它应该没问题。此外,最好将%TYPE用于引用列的参数。

DECLARE 
    v_result BOOLEAN; 
    PROCEDURE Stuff (val1   IN table_1.a_column%TYPE, 
                     val2   IN table_2.b_column%TYPE, 
                     result OUT BOOLEAN) 
    IS 
    BEGIN 
        INSERT INTO table_1 (a_column) VALUES (val1); 
        INSERT INTO table_2 (b_column) VALUES (val2); 

        COMMIT; 

        result := TRUE; 
    EXCEPTION 
      WHEN OTHERS THEN 
                 ROLLBACK; 

                 --Do stuff; 
                 RAISE; 
    END; 
BEGIN 
    Stuff(1, 2, v_result); 

    IF v_result THEN 
      dbms_output.put_line('SUCCESS'); 
    -- Do other stuff 
    END IF; 
END; 

/ 

SUCCESS

答案 1 :(得分:1)

我会更进一步,建议你做"隐藏"一个异常,然后返回一个状态代码,无论是整数,字符串还是布尔值。

相反,依赖于PL / SQL的默认错误传播流程和文档可能在程序中引发的异常。