线路编号如何在Oracle触发器中工作?
发布时间:2020-12-12 16:29:18 所属栏目:百科 来源:网络整理
导读:我有一个错误的触发器,我不知道如何知道哪一行PL / SQL代码抛出该错误.我的错误是 [Oracle]ORA-01403: no data found ORA-06512: at “MYSCHEMA.FOO_BI”,line 9 我的触发器是这样的: create or replace TRIGGER "MYSCHEMA"."FOO_BI" BEFORE INSERT ON FOO
我有一个错误的触发器,我不知道如何知道哪一行PL / SQL代码抛出该错误.我的错误是
我的触发器是这样的: create or replace TRIGGER "MYSCHEMA"."FOO_BI" BEFORE INSERT ON FOO REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE NUM1 NUMBER; NUM2 NUMBER; BEGIN -- some comment if :new.batch_num is null then SELECT COUNT(*) INTO :NEW.BATCH_NUM FROM FOO WHERE CORP_ID = :NEW.CORP_ID; end if; if :new.batch_id is null or :new.batch_id = '' then :NEW.BATCH_ID := :NEW.CORP_ID || '-' || :NEW.BATCH_NUM; end if; /* etc... */ 我发现了什么看起来像similar question,但行编号从创建或替换开始…并将我的错误行表示为注释,我认为必须是假的.在执行触发器时抛出错误时如何报告行号? 行编号(在堆栈跟踪中报告)以DECLARE为第1行开始.因此,如果执行以下操作: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,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 您可以看到错误报告为在第9行发生,实际上是源中的第13行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |