我正在使用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列?
感谢。