如何處理CLOB字段值超過4000字節時提示:“ORA-01704:文字字符串過長”的錯誤

往oracle函CLOB、LONG字段類型的數據表插入值超過4000字節時,在執行INSERT INTO提示:ORA-01704:文字字符串過長錯誤,這種情況下,如果想用SQL實現的話,可以通過ORACLE存儲過程實現。

--處理方法一:用EXECUTE IMMEDIATE 實現

--ASQL:帶參數的INSERT INTO 語句
--
ALongVar1 : 參數值,大於4000字節
CREATE OR REPLACE PROCEDURE EXEC_SQL1(ASQL varchar2, ALongVar1 clob)
AS
BEGIN
EXECUTE IMMEDIATE ASQL USING ALongValue;
END EXEC_SQL1;


--處理方法二:用Dbms_sql接口實現

--ASQL:帶參數的INSERT INTO 語句
--
ALongVar1 : 參數值,大於4000字節
CREATE OR REPLACE PROCEDURE EXEC_SQL(ASQL clob, ALongValue clob)
AS
The_c1 
Integer
The_result 
Integer;--dml_sql_result 
BEGIN
  The_C1 :
=Dbms_sql.open_cursor; 
  Dbms_sql.parse(the_C1, ASQL, DBMS_SQL.NATIVE); 
  DBMS_SQL.BIND_VARIABLE
    (The_c1, 
':LongValue', ALongValue);
  The_result:
=Dbms_sql.execute(The_c1); 
  Dbms_sql.close_cursor(The_C1);
END EXEC_SQL;

 DELPHI調用例子:

    AdoQuery1.Close ;
    AdoQuery1.Parameters.Clear ;
    AdoQuery1.SQL.Clear ;
    AdoQuery1.SQL.Add('{call exec_sql(?,?)}') ;
    AdoQuery1.Parameters.CreateParameter('asql',ftOraClob,pdinput, 30,'') ;
    AdoQuery1.Parameters.CreateParameter('alongvalue',ftOraClob,pdinput, 30,'') ;

 --語句
    AdoQuery1.Parameters.ParamByName('asql').Value :='INSERT INTO TAB(ID, CLOBFLD) VALUES(1, :CLOBVALUE)';

    --值
    AdoQuery1.Parameters.ParamByName('CLOBVALUE').Value :='CLOBVALUE....';
    AdoQuery1.ExecSQL ;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章