Oracle创建触发器实现到MySQL的同步更新

2024-03-31  本文已影响0人  这货不是王马勺

触发器

首先先配置Oracle到MySQL的透明网关实例,以及DBLink,然后创建触发器。
代码示例:

create or replace TRIGGER TRIGGER_TO_MYSQL
AFTER INSERT ON A_DBLINK
FOR EACH ROW
DECLARE var_id INTEGER;  var_name VARCHAR2(20);
pragma autonomous_transaction; 
BEGIN
  var_id := :NEW.id;
  var_name := :NEW.name;
  INSERT INTO A_DBLINK@TOMYSQL ("id", "name") values(var_id,var_name);  
  commit;
END;
/

错误说明

ORA-02025

对于ORACLE参与的异构数据库的分布式事务,ORACLE允许 INSERT INTO 本地表 SELECT * FROM 远程,
但是不允许INSERT INTO 远程表 SELECT * FROM 本地表:
否则就会引发:
ORA-02025: all tables in the SQL statement must be at the remote database.
只能通过变量的方式插入;
参考:

https://blog.csdn.net/meunsina/article/details/13630135

ORA-02047

调用以下的 dblink 之前,需要先commit ,把这边的数据先提交,不然会报错
参考:

https://blog.csdn.net/u010745238/article/details/84074058

ORA-04091

触发器/函数不能读它
出错的原因是因为触发器和DML语句在同一事务管理中,所以方案一便是将触发器和DML语句分成两个单独的事务处理。这里可以使用Pragma autonomous_transaction
参考:

https://blog.csdn.net/ptsx0607/article/details/83094986

ORA-01403

应该是给变量赋值的时候,原:NEW临时表数据已不存在,没有找到解决办法,只能改代码逻辑。
见最终代码示例。

上一篇下一篇

猜你喜欢

热点阅读