0
我有一個BLOB列,我需要它在CLOB中的內容,以便我可以使用更多的字符串函數。不幸的是,我只有SELECT特權在桌子上,所以我不能改變它的結構。將BLOB轉換爲CLOB時出現數字或值錯誤
我使用DBMS_LOB
包,它可以在相對較小的BLOBS下正常工作。例如,對於BLOB 30.000長度是可以的,但具有40.000長BLOB我得到
ORA-06502:PL/SQL:數字或值錯誤%s。
這讓我懷疑某處是否涉及VARCHAR2轉換,但我無法弄清楚,因爲我沒有VARCHAR2變量。
我最長的BLOB是63.000個字符長。
使用下面的這個方法,我設法將53行中的50個轉換。 (其餘3則大於30,000字符。)
任何幫助,將不勝感激。
在此先感謝。
SET serveroutput ON;
DECLARE
sRuleName [column]%type;
bRuleBLOB BLOB;
cRuleBLOB CLOB;
v_file_size number := dbms_lob.lobmaxsize;
v_dest_offset number := 1;
v_src_offset number := 1;
v_blob_csid number := dbms_lob.default_csid;
v_lang_context number := dbms_lob.default_lang_ctx;
v_warning number;
CURSOR cRules IS
SELECT [column]
FROM [table]
WHERE [column] IN ('x','y','z')
ORDER BY [column];
BEGIN
dbms_output.enable(100000);
OPEN cRules;
LOOP
FETCH cRules INTO sRuleName;
EXIT WHEN cRules%NOTFOUND;
--dbms_output.put_line(sRuleName);
SELECT rule
INTO bRuleBLOB
FROM [table]
WHERE [column] = sRuleName;
dbms_lob.createtemporary(cRuleBLOB, true);
v_dest_offset := 1;
v_src_offset := 1;
dbms_lob.converttoclob(cRuleBLOB, bRuleBLOB, v_file_size, v_dest_offset, v_src_offset, v_blob_csid, v_lang_context, v_warning);
dbms_output.put_line(cRuleBLOB);
dbms_lob.freetemporary(cRuleBLOB);
END LOOP;
CLOSE cRules;
END;
謝謝!現在很明顯....我被文檔中的LINE限制弄糊塗了:「行長度溢出,每行限制32767字節」,我從來沒有猜到它會用於整個CLOB –