这是从存储过程返回布尔值作为输出参数的有效方法吗?如果一切正常,则返回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;
答案 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的默认错误传播流程和文档可能在程序中引发的异常。