ORA-01489: 文字列を連結した結果、長さが最大長を超えました

SPOOLで多くのカラムを文字列結合しながらCSVファイル出力する場合などでは、4000文字を超えることも考えられます。文字列は明示的により大きな型にキャストでもしない限りは、デフォルトでVARCHAR型として扱われ、その最大桁数は4000バイトとなります。

異なる型の複数の文字列を結合する場合には大きい方の型にキャストされますが、特に意識せずに文字列を結合していった場合、上限は4000文字ということになります。

上限を超えると以下のエラーが発生します。
ORA-01489: result of string concatenation is too long
ORA-01489: 文字列を連結した結果、長さが最大長を超えました

結合結果が4000文字を超える場合には一部の文字列を「TO_CLOB」にかけ明示的にCLOBにすることにより、結合後の文字列も暗黙的にCLOBにキャストされるようになり、4000文字を超えてもエラーが出なくなります。

-- これはエラーになる
select ('0123456789…(2100文字の文字列)' || '0123456789…(2100文字の文字列)') as longstr from dual;

-- これならOK
select (TO_CLOB('0123456789…(2100文字の文字列)') || '0123456789…(2100文字の文字列)') as longstr from dual;

2011/08/03