如何在 触发器 中 操作 BLOB 列 ?以下是我写的触发器功能是,当向本地数据库中"新闻表"(T_NEWS)中
插入数据前向远程的数据库插入相同的数据,
达到数据同步效果--------------------------------------------------
CREATE OR REPLACE TRIGGER "JLWEB"."/uXATMqarWBoz+c5E1c=865f4d96" 
    BEFORE
INSERT ON "T_NEWS" FOR EACH ROW BEGIN INSERT INTO "JLWEB"."T_NEWS"@"J865F4D96.SYN.US.ORACLE.COM" ("NEWSID","SORTID","NEWSMODIFDATE","NEWSTITLE","USERID","NEWSCONTENT") 
VALUES(:NEW."NEWSID",:NEW."SORTID",:NEW."NEWSMODIFDATE",:NEW."NEWSTITLE",:NEW."USERID",:NEW."NEWSCONTENT");
EXCEPTION WHEN OTHERS 
THEN 
RAISE_APPLICATION_ERROR(-20008,'操作远程数据时出错. ' || SQLCODE||SUBSTR(SQLERRM,1,200)); END;
--------------------------------------------------但当我插入数据时ORACLE会出现异常ORA-20008: 操作远程数据时出错. -2068ORA-02068: 以下严重错误源于J865F4D96.SYN.US.ORACLE.COM
ORA-00600: 内部错误代码,参数: [kokegPinLob1], [], [], [], [], [], [], []
ORA-06512: 在"JLWEB./uXATMqarWBoz+c5E1c=865f4d96", line 1
ORA-04088: 触发器 'JLWEB./uXATMqarWBoz+c5E1c=865f4d96' 执行过程中出错
ORA-06512: 在line 1其中 "NEWSCONTENT" 列为 BLOB 型,如果插入时不插这一列就不出异常.希望高手帮忙解决下这个问题..
先谢了.

解决方案 »

  1.   

    blob型不要用insert into格式来插,要用个过程来插。
      

  2.   

    create or replace directory utllobdir as 'c:\xxx'; --你的BLOB文件所在位置。
    create table bfile_tab (bfile_column BFILE);
    create table t (blob_column BLOB);
    ----------------------------------------
    declare
       a_blob  BLOB;
       a_bfile BFILE := BFILENAME('UTLLOBDIR','BLOB文件名'); 
    begin
       insert into bfile_tab values (a_bfile)
         returning bfile_column into a_bfile;
       insert into t values (empty_blob())
         returning blob_column into a_blob;
       dbms_lob.fileopen(a_bfile);
       dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile));
       dbms_lob.fileclose(a_bfile);
       commit;
    end;
    /
    --这样可以插入一个blob数据。
      

  3.   

    TO: vc555(学习甲骨文)  我的不是从文件里读,
    是想将现在的BLOB列中的数据插入到另一个表的BLOB列中.
    (见我写的触发器)
      

  4.   

    恩,先没看清楚你的需求。不插blob列就不出错吗?但是好像只是说lob对象不能用于远程的select和dbms_lob操作,insert应该可以。你直接写条语句来远程 insert blob看是否出错,可以参考下:
    http://hi.baidu.com/blackeys/blog/item/c0cb3f38c06c8e24b9998f45.html,可能是这个原因。