trigger_nestlevel()能完成怎样的功能?

解决方案 »

  1.   

    首先,多谢关注!!!TRIGGER_NESTLEVEL 用于触发器中以确定当前的嵌套级别。
    trigger_nestlevel() 能返回级联触发的层次。例如:
    有表 table_A 和 table_B。另有触发器 table_A_insert、table_B_insert。
    table_A_insert 的示意
    begin
      insert into table_B values(......);
    end;table_B_insert 的示意
    begin
      --TODO ......
      --我想知道当前活动是由 table_A_insert 中的代码引发的还是
        直接执行命令 insert into table_B values(......) 引发的。
    end;
      

  2.   

    据我知道,oracle中没有这样的功能,因为oracle不支持嵌套触发器(至少行级触发器是不能嵌套的)。对sql来说,是通过其它触发器代码引发或者直接执行sql语句引发并没有实质上的区别。
    如果你需要记录是由什么语句插入记录的,恐怕只能在表中添加一个字段来记录。或者你只需要在程序执行时判断,那恐怕只能用存储过程来处理,因为只有触发器中是无法传递参数的。
      

  3.   

    KingSunSha(弱水三千) 请看我的实验可以证明行级触发器是能嵌套触发的:
    首先
       建立 table_A、table_B、table_C
       建立 table_A_insert、table_B_insert
    create table table_A
    (
      id number(10,0) not null,
      name char(64) not null,
      log_time date not null
    )
    ;
    /
    create table table_B
    (
      id number(10,0) not null,
      name char(64) not null,
      log_time date not null
    )
    ;
    /
    create table table_C
    (
      id number(10,0) not null,
      name char(64) not null,
      log_time date not null
    )
    ;
      

  4.   


    create or replace trigger table_A_insert
    after insert on table_A
    for each row
    begin
      insert into table_B values(:new.id, :new.name, sysdate);
    end
    ;
    /
    create or replace trigger table_B_insert
    after insert on table_B
    for each row
    begin
      insert into table_C values(:new.id, :new.name, sysdate);
    end
    ;然后:
    insert into table_A values(1,'asd',sysdate);
    select * from table_C;
    结果:已创建 1 行。        ID NAME            LOG_TIME
    ---------- --------------- ----------
             1 asd             06-10月-02已选择 1 行。
      

  5.   

    我说的嵌套是指在出发器中对本表的操作,你说的写法是可以的-在触发器中对其他表的操作当然不会涉及到表锁定的问题。但是如果要一条记录是由什么语句插入的,那恐怕只能在外部指定参数了。oracle肯定没有trigger_nestlevel()这样的函数。