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临时表数据已不存在,没有找到解决办法,只能改代码逻辑。
见最终代码示例。