42

データ型のフィールドに4000文字を超える値を設定しようとすると、次のCLOBエラーが発生します。

ORA-01704:文字列リテラルが長すぎます。

無制限の文字の値を設定する必要がある場合、どのデータ型が適用できるかについての提案はありますが、私の場合は、たまたま文字数です15000

注:保存しようとしている長い文字列は、ANSIでエンコードされています。

4

6 に答える 6

55

CLOBを操作するときに何を使用していますか?

すべてのイベントで、PL/SQLを使用して実行できます

DECLARE
  str varchar2(32767);
BEGIN
  str := 'Very-very-...-very-very-very-very-very-very long string value';
  update t1 set col1 = str;
END;
/

SQLFiddleのプルーフリンク

于 2012-12-19T06:56:07.017 に答える
39

以下のクエリのように、文字を複数のチャンクに分割してみてください。

Insert into table (clob_column) values ( to_clob( 'chunk 1' ) || to_clob( 'chunk 2' ) );

それは私のために働いた。

于 2015-05-13T15:29:21.537 に答える
3

私の側でこの問題を解決するために、私はそこですでに提案されたものの組み合わせを使用しなければなりませんでした

DECLARE
  chunk1 CLOB; chunk2 CLOB; chunk3 CLOB;
BEGIN
  chunk1 := 'very long literal part 1';
  chunk2 := 'very long literal part 2';
  chunk3 := 'very long literal part 3';

  INSERT INTO table (MY_CLOB)
  SELECT ( chunk1 || chunk2 || chunk3 ) FROM dual;
END;

お役に立てれば。

于 2019-12-24T14:05:50.177 に答える
2

分割は、挿入する文字に応じて4000文字まで機能します。特殊文字を挿入すると、失敗する可能性があります。唯一の安全な方法は、変数を宣言することです。

于 2015-08-03T19:11:42.273 に答える
0

それは非常に古い質問ですが、経験を共有することはまだ他の人を助けるかもしれないと思います:

'||'を使用して連結することにより、4000バイト/文字のチャンクに分割すると、大きなテキストを1つのクエリに保存できます。

次のクエリを実行すると、次のことがわかります。

  1. 必要な4000バイトを含むチャンクの数
  2. 残りのバイト

与えられた例では、15000バイト(文字)を継続するテキストを保存しようとしているので、

select 15000/4000 chunk,mod(15000,4000) remaining_bytes from dual;

結果: ここに画像の説明を入力してください

つまり、4000バイトの3つのチャンクと3000バイトの1つのチャンクを連結する必要があるため、次のようになります。

INSERT INTO <YOUR_TABLE> 
VALUES (TO_CLOB('<1st_4K_bytes>') || 
        TO_CLOB('<2nd_4K_bytes>') || 
        TO_CLOB('<3rd_4K_bytes>') || 
        TO_CLOB('<last_3K_bytes>)');
于 2022-02-20T11:28:50.170 に答える
-1
INSERT INTO table(clob_column) SELECT TO_CLOB(q'[chunk1]') || TO_CLOB(q'[chunk2]') ||
            TO_CLOB(q'[chunk3]') || TO_CLOB(q'[chunk4]') FROM DUAL;
于 2020-12-01T17:59:47.403 に答える