Oracle 从存储过程返回布尔值作为输出参数?

Oracle 从存储过程返回布尔值作为输出参数?,oracle,plsql,oracle12c,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; RESUL

这是将布尔值作为存储过程的输出参数返回的有效方法吗?在一切正常时返回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;

如果你用得好的话应该没问题。另外,对于引用列的参数,最好使用
%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

如果你用得好的话应该没问题。另外,对于引用列的参数,最好使用
%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

我会更进一步,并建议您不要“隐藏”异常,然后返回状态码,不管它是整数、字符串还是布尔值


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

我会更进一步,建议您不要“隐藏”异常,然后返回状态代码,无论是整数、字符串还是布尔值


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

如果需要知道结果的真/假,为什么不将其用作函数?如果您计划在java/c#或其他语言中的某个地方使用此过程/函数,则布尔值不起作用。制作一个包装器,将布尔值转换为varchar Y/N或数字0/1。检查我的答案,让我知道它有帮助。另请阅读:stackoverflow.com/help/someone-answers如果您需要知道结果的真/假,为什么不将其用作函数?如果您计划在java/c#或其他语言中的某个地方使用此过程/函数,则布尔值不起作用。制作一个包装器,将布尔值转换为varchar Y/N或数字0/1。检查我的答案,让我知道它有帮助。请同时阅读:stackoverflow.com/help/someone-answers