我随手建了个触发器,目的是想熟悉一下触发器,但是建了后,发现只要将触发器设置成有效,触发器中所涉及到的相关的表就无法做修改....请各位高手指点迷津....谢谢大家
具体语句:
需要实现功能是TBL这个表只要有任何数据的修改,就会将其中一个栏位的数量进行修改,现在迷惑的是为什么会锁表....CREATE OR REPLACE TRIGGER TESTBEFORE UPDATEOF QTYON TESTDB.TBLREFERENCING NEW AS NEW OLD AS OLDFOR EACH ROWBEGIN update TESTDB.TBL set qty='99999999' where materialno='UT0002-D01';END test;/
具体语句:
需要实现功能是TBL这个表只要有任何数据的修改,就会将其中一个栏位的数量进行修改,现在迷惑的是为什么会锁表....CREATE OR REPLACE TRIGGER TESTBEFORE UPDATEOF QTYON TESTDB.TBLREFERENCING NEW AS NEW OLD AS OLDFOR EACH ROWBEGIN update TESTDB.TBL set qty='99999999' where materialno='UT0002-D01';END test;/
解决方案 »
- 怎么能知道数据库中哪些函数、过程引用到了某个表?
- oralce8i的触发器问题,实在搞不定了招唤高手!!!!
- with 的 sql server 和 oracle使用
- 三天问题未能解决,继续:1000分求获取oracle数据乱码问题,顶者有分,已结300分。
- 求一句数据库统计的SQL语句~跪求
- oracle数据库文件(dbf后缀),他和foxpro的数据库文件(dbf后缀)相同么?
- 已知一时间与另一时间之差,如何求另一时间,在线
- 请大家帮帮忙,比较简单的问题!
- 请问各位一下:怎么调试带 OUT 参数的存储过程?
- 在oci中如何使用游标变量,有样例的最好了,请帮帮我!最后的这个问题解决后,我会把总结贴出来!
- 新手提问,关于oracle10g 启动lsnctrl start错误
- 如何将sql查询出的数值转换为时间
2. 如果你是修改本表TBL的QTY字段,你可以用的是 :NEW.QTY='9999999'; 当然你可以写成
if :old.materialno='UT0002-D01' then
:NEW.QTY='9999999';
end if;
但那样只有在你主UPDATE语句中所涉及的记录才会应用以上代码.
3. 以上TRIGGER只有当ON TESTDB.TBL与update TESTDB.TBL set中的表不同时才有意义. 触发器内部不允许DML当前表. 对当前表的操作应用:OLD.或:NEW.来引用。