Line numbering (as indicated in the stack trace) begins with the fact that the DECLARE line is line 1. So, if you do the following:
CREATE OR REPLACE TRIGGER foo BEFORE INSERT ON test1 REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE n1 NUMBER := 1; n2 NUMBER := 2; BEGIN -- a comment IF :new.n1 IS NULL THEN n1 := n2/0; END IF; END; / SQL> insert into test1 values (3,'XX','YY',NULL); insert into test1 values (3,'XX','YY',NULL) ORA-01476: divisor is equal to zero ORA-06512: at "XXX.FOO", line 9 ORA-04088: error during execution of trigger 'XXX.FOO' SQL> select line, text from all_source where name = 'FOO'; LINE TEXT ---------- -------------------------------------------------------------------------------- 1 TRIGGER foo 2 BEFORE INSERT ON test1 3 REFERENCING OLD AS OLD NEW AS NEW 4 FOR EACH ROW 5 DECLARE 6 n1 NUMBER := 1; 7 n2 NUMBER := 2; 8 9 BEGIN 10 11 -- a comment 12 IF :new.n1 IS NULL THEN 13 n1 := n2/0; 14 END IF; 15 END; 15 rows selected
You can see that the error was logged as occurring on line 9, which is actually line 13 in the source.
source share