美文网首页
Oracle创建触发器实现到MySQL的同步更新

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

作者: 这货不是王马勺 | 来源:发表于2024-03-31 10:56 被阅读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临时表数据已不存在,没有找到解决办法,只能改代码逻辑。
    见最终代码示例。

    相关文章

      网友评论

          本文标题:Oracle创建触发器实现到MySQL的同步更新

          本文链接:https://www.haomeiwen.com/subject/cqgvtjtx.html