有以下一段代码.
create trigger test_trigger_insert
before insert or update on EMP 
for each row
begin
:new.JOB:=upper(:new.JOB);
end;第一个问题
关键字before指定在触发语句实际执行之前执行该触发器,对吧?第二个问题
:new.JOB:=upper(:new.JOB);因为用的是NEW,表示新数据,指的是把临时表(inserted)中JOB列转换为大写对吧?第三个问题(最不解的一个问题)
当真实表(EMP)执行INSERT或者UPDATE操作的时候,由于指定的是BEFORE关键字,所以真实表(EMP)的INSERT或者UPDATE操作并不马上执行,而是先执行这个触发器,在这个触发器中,把临时表(虚拟表)中受影响的JOB列转换为大写。
后面的属于我的猜测:触发器执行完毕,更新了inserted表中的数据,然后再把inserted表的相关行更新到真实表中,是这样的吗?如果不是:我就没搞懂了,该触发器没有对真实表(EMP)的具体操作,那么是如何把临时表(inserted)和真实表(EMP)相关联起来的?难道说是真实表(EMP)的INSERT或者UPDATE操作取的是临时表(inserted)里面的数据?

解决方案 »

  1.   

    收集些oracle 触发器的 资料
    http://blog.csdn.net/xys_777/archive/2010/07/16/5738567.aspx
    http://blog.csdn.net/xys_777/archive/2010/07/16/5738565.aspx
    http://blog.csdn.net/xys_777/archive/2010/07/16/5738562.aspx
    http://blog.csdn.net/xys_777/archive/2010/07/16/5738555.aspx
      

  2.   

    能不能针对我提出的问题来解答?
    这样,我换个提问方法
    触发条件是INSERT
    当触发器指定BEFORE关键字后,会先执行触发器。.如果我只在触发器里更改了新插入行某个字段的值,当触发器执行完毕的时候,就会跳回引发触发器执行的语句(也就是INSERT操作),那么原触发语句(INSERT)所插入的新行是取的新值吗,如果是,是哪里取到的? 
      

  3.   

    建议到Oracle版块提问,听的人比较专业,像你说的BEFORE关键字,MS-SQL是INSTEAD OF的,语法也不一样,所以不好回答。
      

  4.   

    MS-SQL没有BEFORE?这个是我要书上找到的例子,SQL2000的书
      

  5.   

    SQL2000 有BEFORE的吧,是新增加的