我写了这样的一个触发器:
CREATE OR REPLACE TRIGGER temp_aiur
AFTER UPDATE ON tbl_a
FOR EACH ROW
BEGIN
update tbl_b tb set (empno, sal, age)= (select ta.empno,
ta.sal,
ta.age
from tbl_a ta
where tb.empno=ta.empno
and tb.xh=ta.xh;
end;原来没有添加 tb.empno=ta.empno这个条件时,运行得一直比较顺利,但是好像自从添加了这个条件以后经常不能update到表tbl_b, 我试着手工执行是没有问题得,但是为什么老是触发不成功呢???
CREATE OR REPLACE TRIGGER temp_aiur
AFTER UPDATE ON tbl_a
FOR EACH ROW
BEGIN
update tbl_b tb set (empno, sal, age)= (select ta.empno,
ta.sal,
ta.age
from tbl_a ta
where tb.empno=ta.empno
and tb.xh=ta.xh;
end;原来没有添加 tb.empno=ta.empno这个条件时,运行得一直比较顺利,但是好像自从添加了这个条件以后经常不能update到表tbl_b, 我试着手工执行是没有问题得,但是为什么老是触发不成功呢???
解决方案 »
- 如何将查询获得的序列名 在插入语句中使用?急!求解!
- 高手们帮我看看触发器为什么编译不通过,谢谢
- 请大家推荐几本Oracle性能优化方面的书
- oracle 不同库,或不同用户之间如何互相访问???
- 问两个面试时的SQL问题各位老大支持一下
- ORA-00932: inconsistent datatypes: expected - got - 存储过程如何将两个查询的结果合在一起放进游标
- 请教:查询各个表空间利用率的SQL语句是什么?
- 如果让一个字段达到ACCESS的自动编号的效果,改如何处理?
- 关于solaris下的oracle数据库连接问题
- 请问大家一个问题,快快帮帮我啊。。
- 连接oracle 10g数据库问题
- 存储语法有误``麻烦帮我看看````
--只对empno,sal,age这3列更新,才会被触发的触发器
CREATE OR REPLACE TRIGGER temp_aiur
AFTER UPDATE of (empno,sal,age) ON tbl_a
FOR EACH ROW
BEGIN
UPDATE tb1_b tb
set tb.empno=:new.empno,tb.sal=:new.sal,tb.age=:new.age
where tb.empno=:old.empno and tb.xh=:old.xh
end;
你这样写,把触发器中经典的new和old都舍弃了。
可以修改成如下:
//后触发
CREATE OR REPLACE TRIGGER temp_aiur
AFTER UPDATE of (empno,sal,age) ON tbl_a
FOR EACH ROW
BEGIN
UPDATE tb1_b tb
set tb.empno=:new.empno,tb.sal=:new.sal,tb.age=:new.age
where tb.empno=:new.empno and tb.xh=:old.xh
end; 或
//前触发
CREATE OR REPLACE TRIGGER temp_aiur
BEFORE UPDATE ON tbl_a
FOR EACH ROW
BEGIN
update tbl_b tb set (empno, sal, age)= (select ta.empno,
ta.sal,
ta.age
from tbl_a ta
where tb.empno=ta.empno
and tb.xh=ta.xh)
end;
格式如下: CREATE OR REPLACE TRIGGER temp_aiur
AFTER UPDATE of empno,sal,age ON tbl_a
FOR EACH ROW
BEGIN
UPDATE tb1_b tb
set tb.empno=:new.empno,tb.sal=:new.sal,tb.age=:new.age
where tb.empno=:old.empno and tb.xh=:old.xh
end;