我有一個clob變量,需要將它分配給varchar2變量。 CLOB VAR內的數據小於4000(i..e VARCHAR2的最大範圍)ORACLE10 +如何將CLOB轉換爲VARCHAR2裏面的oracle pl/sql
我試圖
report_len := length(report_clob);
report := TO_CHAR(dbms_lob.substr(report_clob, report_len, 1));
report_clob := null;
但結果報告到長期價值,我邊看邊調試。另外,當我從我的C#代碼調用這個SQL(PROC)。它抱怨說緩衝區太小,因爲我發送參數爲每個varchar,但上面的轉換可能會把它變成長期價值。
我甚至嘗試直接分配
report_clob := report
得到同樣的結果。
編輯
好,回答下面請看問題:在PL/SQL開發 我調試使用測試腳本。報告變量是varchar2(4000)。當我在第二線之後時。報告顯示是一個長期價值,它只是說(長期價值)。甚至不能看到內容。
report和report_clob從過程中變出。這個過程是從C#代碼調用的。
當我調用此過程時,C#中有一個異常字符串緩衝區太小。我在C#中給出了5000個報表變量的大小,足以從過程中接收4000個最大字符值。所以我想問題不在於此。
而當我分配報告:='一些字符串....',那麼C#調用工作正常。
所以我的調查說,報告:=變換(report_clob)正在使報告變成long值或使5000個varchar輸出參數中處理較大值的C#代碼有問題的一些這樣的事情(怪異)。
更多詳情我將樂意提供。
'report'是如何聲明的? 'LONG'或'VARCHAR2'?你如何調試,以及如何將值返回給'c#' - 函數返回或輸出參數,以及它是什麼類型? –
'report:= CAST(report_clob AS VARCHAR2(3999));' – Annjawn
'DBMS_LOB.substr'返回一個VARCHAR2,你不需要'TO_CHAR'函數。還有,你稱之爲長期價值?你如何調試?什麼信息錯誤是你得到(即甲骨文或C#)?報表變量是如何聲明的? –