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
。
私は何か間違ったことをしていますか?
dbms_lob
パッケージを使用する必要があります。clobに文字列を追加する手順はdbms_lob.append
です。
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;
CLOBにデータを追加する方法をグーグルで調べているときにこの質問を見つけました。私の特定の問題については、dbms_lob
パッケージを使用できないレガシーPL/SQLシステムを使用しているので、自分の状況で他の人の利益のために自分の答えを共有したいと思いました。
解決策:OracleのCONCAT function in a
SELECTquery, the
CONCATfunction works for the
CLOB`データ型を使用します。例(@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;
お役に立てば幸いです。
OracleSQLDeveloperのデータインポート機能でこのケースを解決しました。