加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

线路编号如何在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代码抛出该错误.我的错误是

[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 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行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读