SQL>
SQL> CREATE TABLE error_log(
2 order_id NUMBER(10) NOT NULL,
3 error_code NUMBER NOT NULL,
4 error_text VARCHAR2(1000) NOT NULL,
5 logged_user VARCHAR2(30) NOT NULL,
6 logged_date DATE NOT NULL
7 );
Table created.
SQL>
SQL> CREATE TABLE order_tab(
2 order_id NUMBER(10) PRIMARY KEY,
3 order_date DATE NOT NULL,
4 total_qty NUMBER,
5 total_price NUMBER(15,2),
6 supp_id NUMBER(6)
7 );
Table created.
SQL>
SQL> INSERT INTO order_tab VALUES (101,sysdate,100,750,1001);
1 row created.
SQL>
SQL> CREATE OR REPLACE PROCEDURE log_error
2 (p_order_id NUMBER,
3 p_error_code NUMBER,
4 p_error_text VARCHAR2)
5 IS
6 PRAGMA AUTONOMOUS_TRANSACTION;
7 BEGIN
8 INSERT INTO error_log VALUES (p_order_id,p_error_code,p_error_text,USER,SYSDATE);
9 COMMIT;
10 END;
11 /
Procedure created.
SQL>
SQL> CREATE OR REPLACE PROCEDURE create_order(p_order_id NUMBER)
2 IS
3 BEGIN
4 INSERT INTO order_tab VALUES(p_order_id,SYSDATE,NULL,NULL,1001);
5 COMMIT;
6 EXCEPTION WHEN OTHERS THEN
7 log_error(p_order_id,SQLCODE,SQLERRM);
8 ROLLBACK;
9 END;
10 /
Procedure created.
SQL>
SQL> DECLARE
2 PRAGMA AUTONOMOUS_TRANSACTION;
3 FUNCTION dummy_log_error RETURN NUMBER;
4 v_num NUMBER(1):=0;
5 returnCode NUMBER :=dummy_log_error;
6 FUNCTION dummy_log_error RETURN NUMBER
7 IS
8 BEGIN
9 INSERT INTO error_log VALUES (-99,-99,'Dummy Error!',USER,SYSDATE);
10 RETURN (-99);
11 END;
12 BEGIN
13 INSERT INTO error_log VALUES (v_num,v_num,'No Error!',USER,SYSDATE);
14 COMMIT;
15 END;
16 /
PL/SQL procedure successfully completed.
SQL>
SQL> drop table order_tab;
Table dropped.
SQL>
SQL> drop table error_log;
Table dropped.