当执行更新表a时,触发执行往表b里插入一条当前表a的记录,两个表结构都是一样的,但表中有一个blob字短,实现目的比较清楚的,当我如下写,执行更新表a的时候错误代码为:22275,怎么回事呢?CREATE OR REPLACE TRIGGER test
BEFORE DELETE OR UPDATE
ON table_A 
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
if updating then
   insert into table_B(col_1,col_2)
    values(:NEW.col_1, :NEW.col_2);
end if;
end;但如果触发器中去掉col_2字段就正常运行了!
其中,col_2字段为blob类型!请熟悉的朋友帮忙解决!

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER test
    BEFORE DELETE OR UPDATE
    ON table_A 
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    as
    l_blob  blob;
    begin
    if updating then
       insert into table_B(col_1,col_2)
        values(:NEW.col_1, empty_blob())
       return col_2 into l_blob;
    dbms_lob.copy(l_blob,:new.col_2,1,1);
    end if;
    end;
      

  2.   

    有了REFERENCING NEW AS NEW OLD AS OLD
    new前就不要加冒号了。漏了一个参数dbms_lob.copy(l_blob,new.col_2,dbms_lob.getlength(new.col_2),1,1);具体用法查看dbms_lob包。