SQL>
SQL>
SQL>
SQL> CREATE OR REPLACE PROCEDURE RaiseError (
2 p_Raise IN BOOLEAN,
3 p_ParameterA OUT NOCOPY NUMBER) AS
4 BEGIN
5 p_ParameterA := 7;
6 IF p_Raise THEN
7 RAISE DUP_VAL_ON_INDEX;
8 ELSE
9 RETURN;
10 END IF;
11 END RaiseError;
12 /
Procedure created.
SQL>
SQL> set serveroutput on
SQL>
SQL> DECLARE
2 v_TempVar NUMBER := 1;
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE('Initial value: ' || v_TempVar);
5 RaiseError(FALSE, v_TempVar);
6 DBMS_OUTPUT.PUT_LINE('Value after successful call: ' ||
7 v_TempVar);
8
9 v_TempVar := 2;
10 DBMS_OUTPUT.PUT_LINE('Value before 2nd call: ' || v_TempVar);
11 RaiseError(TRUE, v_TempVar);
12 EXCEPTION
13 WHEN OTHERS THEN
14 DBMS_OUTPUT.PUT_LINE('Value after unsuccessful call: ' ||
15 v_TempVar);
16 END;
17 /
Initial value: 1
Value after successful call: 7
Value before 2nd call: 2
Value after unsuccessful call: 7
PL/SQL procedure successfully completed.
SQL>
SQL>