如何在触发器中使用dblink将CLOB列从一个表更新到另一个表?

问题描述

我在Oracle数据库中有2个表,我要更新的其中一个表在另一个使用dblink连接的数据库上。在我的表中,有两列类型为CLOB的列。我在一个数据库中编写了一个触发器,该触发器应将新的CLOB列的值更新为远程数据库上的远程表。当我想更新Clob列时,出现以下错误

sql错误:ORA-02055:分布式更新操作失败;需要回滚 ORA-22992:无法使用从远程表中选择的LOB定位器 ORA-04088:执行触发器'SPECTRA.REPORT_UPDATE'时出错 02055. 00000-“分布式更新操作失败;需要回滚” *原因:分布式更新操作期间的故障可能没有 回滚该操作的所有效果。以来 一些网站可能不一致,交易必须回滚到 保存点或全部 *操作:回滚到保存点或回滚事务并重新提交

如何更新远程数据库中的CLOB列的值?

解决方法

您是否尝试过使用DBMS_LOB软件包?即功能

  DBMS_LOB.COPY (
  dest_lob    IN OUT NOCOPY BLOB,src_lob     IN            BLOB,amount      IN            INTEGER,dest_offset IN            INTEGER := 1,src_offset  IN            INTEGER := 1);

DBMS_LOB.COPY ( 
  dest_lob    IN OUT NOCOPY CLOB  CHARACTER SET ANY_CS,src_lob     IN            CLOB  CHARACTER SET dest_lob%CHARSET,src_offset  IN            INTEGER := 1);

https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_lob.htm#i997674

或粘贴您的代码...