触发器
首先先配置Oracle到MySQL的透明网关实例,以及DBLink,参考OracleDBLink专题,然后创建触发器。
代码示例:
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临时表数据已不存在,没有找到解决办法,只能改代码逻辑。
见最终代码示例。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




