ファイルからOracleのCLOBへのデータのコピー
次のcopy_file_data_to_clob()プロシージャは、ファイルからテキストを読み取り、それをCLOBに格納する方法を示しています。
作成手順copy_file_data_to_clob(
p_clob_id INTEGER、
p_directory VARCHAR2、
p_file_name VARCHAR2
)AS
v_file UTL_FILE.FILE_TYPE;
v_chars_read INTEGER;
v_dest_clob CLOB;
v_amount INTEGER:=32767;
v_char_buffer VARCHAR2(32767 );
BEGIN
-空のCLOBを挿入します
INSERTINTO clob_content(
id、clob_column
)VALUES(
p_clob_id、EMPTY_CLOB()
);
-CLOBのLOBロケーターを取得します
SELECTclob_column
INTO v_dest_clob
FROM clob_content
WHERE id =p_clob_id
FOR UPDATE;
-テキストを読み取るためにファイルを開きます(1行あたり最大v_amount文字)
v_file:=UTL_FILE.FOPEN(p_directory、p_file_name、'r'、v_amount);
-コピーファイルからv_dest_clobへのデータを一度に1行
LOOP
BEGIN
-ファイルからv_char_bufferへの行を読み取ります;
-G ET_LINE()は、新しい行の文字を
-v_char_buffer
UTL_FILE.GET_LINE(v_file、v_char_buffer);
v_chars_read:=LENGTH(v_char_buffer);
-にコピーしません。 v_dest_clobへの行
DBMS_LOB.WRITEAPPEND(v_dest_clob、v_chars_read、v_char_buffer);
-v_char_buffer;
-newlineのASCII値は10であるため、v_dest_clobにnewlineを追加します。CHR(10 )はnewlineを返します
DBMS_LOB.WRITEAPPEND(v_dest_clob、1、CHR(10));
EXCEPTION
-ファイルにデータがなくなったら、終了します
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
-ファイルを閉じます
UTL_FILE.FCLOSE(v_file);
DBMS_OUTPUT.PUT_LINE('コピーに成功しました完了しました。');
END copy_file_data_to_clob;
/