web-dev-qa-db-ja.com

非常に大きなテキストデータとCLOB列の操作

documentation CLOBおよびNCLOBデータ型列によると、最大8テラバイトの文字データを格納できます。

100 000文字を含むテキストがありますが、次のようなクエリを実行するにはどうすればよいですか。

UPDATE my_table SET clob_column = 'text, which contains 100 000 characters' 
WHERE id = 1

テキストで、文字数が最大32767の場合、PL/SQL匿名ブロックを使用できます。

DECLARE
   myvar VARCHAR2(15000);
BEGIN
    myvar := 'text, which contains 100 000 characters';
    UPDATE my_table SET clob_column = myvar
    WHERE id = 1;
    ....
 END; 

テキストが非常に大きく、たとえば100 000文字が含まれている場合の解決策は何ですか?

更新

dbms_lob.appendで試しています:

    create table t1 (c clob);

    declare
      c1 clob;
      c2 clob;
    begin
      c1 := 'abc';
      c2 := 'text, which contains 100 000 characters';
      dbms_lob.append(c1, c2);
      insert into t1 values (c1);
    end;

ただし、エラーも発生しました:string literal too long

私は何か間違ったことをしていますか?

5
OTAR

dbms_lobパッケージを使用する必要があります。clobに文字列を追加する手順はdbms_lob.appendです。

DBMS_LOBドキュメント

declare
  c1 clob;
  c2 varchar2(32000);
begin
  c1 := 'abc';
  c2 := 'text, which contains 32 000 characters';
  dbms_lob.append(c1, c2);
  c2 := 'some more text, which contains 32 000 characters';
  dbms_lob.append(c1, c2);
  insert into t1 values (c1);
end;
6
Alen Oblak

CLOBにデータを追加する方法をグーグルで調べているときにこの質問を見つけました。私の特定の問題については、dbms_lobパッケージを使用できないレガシーPL/SQLシステムを使用しているので、自分の状況で他の人の利益のために自分の答えを共有したいと思いました。

解決策:OracleのCONCAT function in aSELECTquery, theCONCATfunction works for theCLOB`データ型を使用します。例(@AlenOblakの例を使用):

declare
  c1 clob;
  c2 varchar2(32000);
begin
  c1 := 'abc';
  c2 := 'text, which contains 32 000 characters';
  SELECT CONCAT(c1, c2) INTO c1 FROM DUAL;
  c2 := 'some more text, which contains 32 000 characters';
  SELECT CONCAT(c1, c2) INTO c1 FROM DUAL;
  insert into t1 values (c1);
end;

お役に立てば幸いです。

2
entpnerd

OracleSQLDeveloperのデータインポート機能でこのケースを解決しました。

  1. 大きな文字列やその他の属性を使用して.dsvファイルを作成します。
  2. テーブルを右クリックして、[データのインポート]を選択するだけです
  3. ファイルを選択してください
  4. データインポートでWizardステップ1:厳密なデリメータ、ラインターミネータ、行制限、エンクロージャ文字などを選択します。
  5. ステップ2:インポート方法=挿入、ステップ3:ファイルとテーブルの列を相互にマップする
  6. ステップ4:データインポートを実行する
0
rustohero