次のように、Oracle Databaseにテーブルがあります。
create table test_clob(
id1 number,
clob_col clob);
サイズが 4000 を超える varchar2 変数を CLOB 列に挿入しようとすると、問題なく挿入されます。
insert into test_clob values (1,rpad('a',32760,'a'));
commit;
次のように CLOB 列を更新しようとすると、完全に正常に動作します。
update test_clob set clob_col = rpad('b',32760,'b') where id1 = 1;
commit;
ただし、次のように更新ステートメントを実行しようとすると、「ORA-01461: LONG 列に挿入するためだけに LONG 値をバインドできます」というエラーが原因で失敗します。
declare
large_string varchar2(32767) := rpad('c',32760,'c');
begin
update test_clob set clob_col = nvl(large_string,clob_col) where id1 = 1;
commit;
end;
問題を引き起こしているのはNVL機能であると思われます。これに関するヘルプは大歓迎です。
注: この例では単純なテーブルを使用していますが、実際にはテーブルには複数の列があり、更新ステートメントは一度に多くの列を更新する必要があります。