日期:2014-05-17  浏览次数:21041 次

如何在 触发器 中 操作 BLOB 列 ?
如何在   触发器   中   操作   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   型,如果插入时不插这一列就不出异常.

希望高手帮忙解决下这个问题..
先谢了.

------解决方案--------------------
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数据。
------解决方案--------------------
學習...