clob 変数があり、それを varchar2 変数に割り当てる必要があります。clob var 内のデータが 4000 未満 (つまり、varchar2 の最大サイズ) oracle10+
私は試した
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) です。2行目以降に足を踏み入れたとき。レポートは long 値であることが示され、 (Long Value) とだけ表示されます。中身も見えません。
report および report_clob は、プロシージャーからの出力変数です。このプロシージャは、C# コードから呼び出されます。
このプロシージャを呼び出すと、C# で小さすぎる例外文字列バッファがあります。プロシージャから最大 4000 文字の値を受け取るのに十分な C# のレポート変数のサイズとして 5000 を指定しました。だから私は問題がそこにあるとは思わない。
report:= 'some string....' を割り当てると、C# 呼び出しが正常に機能します。
したがって、私の調査によると、report := transform (report_clob) はレポートを long 値またはそのようなもの (奇妙なもの) にするため、5000 varchar 出力パラメーターでより大きな値を処理するために C# コードが問題になります。
詳細については、喜んで提供させていただきます。