ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

Oracle:長い文字列が挿入できない

取得したデータをOracleデータベースに挿入しようとすると、「ORA-01704: 文字列リテラルが長すぎます 」が発生しました。
カラムの型は、CLOB型なので、十分挿入できるはずです。

f:id:AJYA:20160129060449j:plain
photo credit: IMG_1078 via photopin (license)

上限がある

検索してみると、挿入する文字列の長さに上限があるようです。
シングルクオートで囲まれた文字列をリテラルと呼ぶんですね。
ORA-01704 - オラクル・Oracle エラー FAQ

こちらでは、シングルクオートで囲まれた文字列をテキスト・リテラルと呼び、4000バイトと書かれていました。
リテラル

試した結果1333文字が上限

4000バイトが上限なのか試してみました。
ひらがなのみのデータを作成し挿入したところ、1333文字では挿入できましたが、1334文字では挿入できませんでした。

1333文字のひらがなをUTF-8に変換してバイト数を求めると、3999バイトになり挿入できます。
1334文字のひらがなでは、同様にUTF-8に変換してバイト数を求めると、4002バイトになり、挿入できません。


挿入しようとしているプログラムが古いプログラムで、対処ができるかこれから調査です。
理由はわかったのでなんらかの方法でエラーを回避する予定です。