oracle触发器 invalid number 问题(写好触发器之后 测试的时候遇到的问题)

--之前代码写完之后,触发器创建成功了,但是没测试  。。然后测试的时候出问题了
-- 执行update和delete操作的时候,报错invalid number
-- 后来发现时因为本地id类型是number,远程是varchar2,而且远程表里边有varchar2类型的id数据
-- 所以where id的时候会报错,,
--解决方式如下:声明一个目标类型的变量来接数据,然后再过去比较。问题解决

CREATE OR REPLACE TRIGGER U_MyTrigger AFTER UPDATE ON TYPE FOR EACH ROW
DECLARE 
 old_id VARCHAR2(36);
BEGIN	
		old_id := :OLD.ID;
		if :OLD.P_ID IS NULL THEN 
				UPDATE 目标库.DIC_GROUP 
				SET ID=:NEW.ID,DIC_NAME=:NEW.TYPE_NAME,DIC_CODE=:NEW.B_CODE
				WHERE ID=old_id;	
		ELSIF :OLD.P_ID IS NOT NULL THEN
				UPDATE 目标库.DIC_GROUP_ITEMS 
				SET ITEM_NAME=:NEW.TYPE_NAME,DIC_CODE=:NEW.B_CODE,PARENT_ID=:NEW.P_ID
				WHERE ID=old_id;	
		end if;
END;


CREATE OR REPLACE TRIGGER D_MyTrigger AFTER DELETE ON TYPE FOR EACH ROW
DECLARE 
 old_id VARCHAR2(36);
BEGIN
		old_id := :OLD.ID;
		if :OLD.P_ID IS NULL THEN 
				DELETE from 目标库._DIC_GROUP
				WHERE ID=old_id;	
		elsIf :OLD.P_ID IS NOT NULL THEN 
		DELETE from 目标库.DIC_GROUP_ITEMS  
		WHERE ID=old_id;	
		end if;
END;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值