在INSERT触发器中更新blob列(Oracle 11g)

时间:2016-04-12 15:13:24

标签: oracle oracle11g blob

我正在使用Oracle 11.0.2.3。我有一个带有BLOB列的表,此列存储XML文本。对于这个表,我做了一个BEFORE INSERT触发器,我能够按预期查看blob列值(via:new.XML_BLOB)。但是,当我更改blob中的XML数据(在触发器代码中)时,它根本不会持久存储到BLOB列中。

create or replace TRIGGER MY_TRIGGER
  BEFORE INSERT
  ON MY_TABLE
  FOR EACH ROW
DECLARE
  v_Buffer  varchar2(4000);
BEGIN

   if (INSERTING) then

      v_buffer := UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(:new.XML_BLOB, 2000, 1)) || UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(:new.XML_BLOB, 2000, 2001));

      v_buffer := replace(v_buffer,'<id>Data</id>', '<id>New-Data</id>');

      :new.XML_BLOB := sf_convert_clob_to_blob(to_clob(v_buffer));

   end if;          

exception
    when OTHERS then
         RAISE;
end;

函数sf_convert_clob_to_blob取自此处:Copy current CLOB column to new BLOB column in Oracle

如何通过INSERT触发器强制更改BLOB列?

感谢。

0 个答案:

没有答案