clob
Oracle 10g のピボットを作成するために、データ型からデータをフェッチし、varchar2 に変換する必要があるという要件があります。
私は以下を使用しています
select max(case
when key='abc'
then dbms_lob.substr(value)
end) as data_abc
from table.
値が 4000 未満の場合、上記のクエリは正常に機能しますが、4000 を超える場合は、バッファ制限のエラーが表示されます。dbms_lob.substr()
いくつかのブログを読んで、SQL では 4000 文字しか処理できないが、pl/sql ステートメントでは最大 32k を処理できることを知りました。
プロシージャを作成して実行すると、正常に動作します。しかし、私は関数でそれを使いたいです。以下は私の機能です:
create or replace FUNCTION CLOBTOVARCHAR
RETURN varchar2 is out_attribute_var varchar2(32767) ;
BEGIN
FOR i IN (select attribute_Value from car_course_attribute where id=1547156)
LOOP
out_attribute_var := dbms_lob.substr(i.attribute_Value, 32000, 1);
END LOOP;
RETURN out_attribute_var;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001, 'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END CLOBTOVARCHAR;
データが小さい場合は問題なく動作しますが、データが 4k より大きい場合は同じエラーが返されます。今、私は2つの質問があります.1)clob
ピボットを取得したいので、をvarchar2に変換することで正しくやっていますか?2)関数は正しいですか?