Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段相关的知识,希望对你有一定的参考价值。

有两张表A与B,A和B有一个相同的字段m,要创建一个触发器实现:每当B插入一条数据后,将B的m字段内数据和A的m字段内数据比较(A的m字段已插入数据),当A.m=B.m时,更新A.STATUS=1.
我的代码是:
create trigger XXX

after insert
on B
for each row when(new.m is not null)
begin
update A set STATUS=1
where A.m=B.m;
end;
/
报错B.m为无效的标识符

请问应该怎么编写代码实现上述功能,请大神们指点指点,非常感谢orz...

create or replace trigger XXX


for each row when(:new.m is not null)
begin
update A set STATUS=1 where A.m=:NEW.m;
end;
/

追问


请问不管我用after还是before insert它都报错说缺失before,after或instead关键字是怎么回事啊TAT?谢谢帮忙!

追答--加一点说明:你这个触发器的名字不可有特殊字符。
--这个我编译通过了,你在试试,学Oracle你要努力哦。
CREATE OR REPLACE TRIGGER TESTUSER.XXXSTU
AFTER INSERT
ON NEW_COMM
FOR EACH ROW
WHEN (NEW.UUID IS NOT NULL )
DECLARE
BEGIN
    UPDATE STUDENT SET SELLING=1 WHERE UUID=:NEW.UUID;
   EXCEPTION
     WHEN OTHERS THEN
       RAISE;
END XXXSTU;
/

参考技术A 将B.m换成:new.m

oracle中两张表中的两个字段值的模糊比对

我有A表 字段X 值分别为ab ,vmc, zc , 另有B表 字段Y 值分别为abc, vmc_1, zdc
这个时候我希望X、Y字段对比,以A为基准,找到B表中对应模糊查询的的数据,最后希望得到的一个新的结果集为
X Y
ab abc
vm vm_1

楼上的思路是对的,这里整理一下改成oracle的写法。有问题再追问。
SELECT * FROM A,B WHERE B.Y LIKE '%'||A.X||'%'

参考技术A Select T1.X , T2.Y

From T1,T2
where T1.X like '%' + T2.Y + '%'
参考技术B 用ltrim函数 参考技术C 用like '%%' 撒,就是模糊对比了。

以上是关于Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段的主要内容,如果未能解决你的问题,请参考以下文章

oracle 想把三张表关联起来,怎么关联?

oracle的数据库中怎么将一张表中数据插入另一张表,两张表都存在

ORACLE中 2张类似表进行数据对比,并把值放到另一张表里面进行显示

oracle如何比较两个表数据的差异?

怎样用Sql语句判断一张表中的两条数据相同

触发器处理表更新