表題の通り、DBMS_LOB.LOADCLOBFROMFILEプロシージャ で
テキストファイル を CLOB型列 に ロードするやで彡(゚)(゚)
まずCLOB型の列を持つテーブルとディレクトリ・オブジェクトを作ります。
CONNECT AYSHIBAT/xxxxxxxx
CREATE TABLE TEST_CLOB (
C1 NUMBER
, C2 CLOB
);
ALTER TABLE TEST_CLOB ADD CONSTRAINT TEST_CLOB_PK PRIMARY KEY(C1) USING INDEX;
CONNECT /AS SYSDBA
CREATE DIRECTORY DIR_AYSHIBAT as '/home/oracle/work/ayshibat';
GRANT READ, WRITE ON DIRECTORY DIR_AYSHIBAT TO AYSHIBAT;
テキストファイルをディレクトリ・オブジェクトのパスに置きます。
$ pwd
/home/oracle/work/ayshibat
$ ls -la
total 112
drwxr-xr-x 2 oracle oinstall 4096 Aug 15 11:49 .
drwxr-xr-x 3 oracle oinstall 4096 Aug 15 11:45 ..
-rw-r--r-- 1 oracle oinstall 102000 Aug 15 11:47 test_clob_data.txt
$
件数が無いのを確認して、DBMS_LOB.LOADCLOBFROMFILEプロシージャでテキストファイルをCLOB型列に流し込むと……
SELECT C1, DBMS_LOB.GETLENGTH(C2) FROM TEST_CLOB;
no rows selected
DECLARE
bfile_p BFILE; -- BFILE pointer
clob_loc CLOB; -- CLOB locator
n_c1 NUMBER; -- TEST_CLOB Column C1
n_doffs NUMBER := 1; -- dest_offset
n_soffs NUMBER := 1; -- src_offset
n_lctx NUMBER := 0; -- lang_context
n_warn NUMBER; -- warning
BEGIN
-- BFILE pointer set
bfile_p := BFILENAME('DIR_AYSHIBAT', 'test_clob_data.txt');
-- Insert record and CLOB locator get
SELECT NVL(MAX(C1), 0) + 1 INTO n_c1 FROM TEST_CLOB;
INSERT INTO TEST_CLOB VALUES (n_c1, EMPTY_CLOB())
RETURNING C2 INTO clob_loc;
-- File open
DBMS_LOB.FILEOPEN(bfile_p, DBMS_LOB.FILE_READONLY);
-- LOAD CLOB from text file
DBMS_LOB.LOADCLOBFROMFILE(
clob_loc -- CLOB locator
, bfile_p -- BFILE pointer
, DBMS_LOB.LOBMAXSIZE -- amount
, n_doffs -- dest_offset
, n_soffs -- src_offset
, NLS_CHARSET_ID('AL32UTF8') -- BFILE Characterset ID
, n_lctx -- lang_context
, n_warn -- warning
);
COMMIT;
-- File close
DBMS_LOB.FILECLOSE(bfile_p);
END;
/
PL/SQL procedure successfully completed.
件数とバイト数を確認すると、上手く行ったやで彡(^)(^)
SELECT C1, DBMS_LOB.GETLENGTH(C2) FROM TEST_CLOB;
C1 DBMS_LOB.GETLENGTH(C2)
---------- ----------------------
1 102000
マニュアル類(※11gR2版)は下記やで彡(゚)(゚)
DBMS_LOBパッケージ
LOADCLOBFROMFILEプロシージャ
http://docs.oracle.com/cd/E16338_01/appdev.112/b56262/d_lob.htm#i998978SQL言語リファレンス
BFILENAME
http://docs.oracle.com/cd/E16338_01/server.112/b56299/functions019.htm#i76871SQL言語リファレンス
EMPTY_BLOB、EMPTY_CLOB
http://docs.oracle.com/cd/E16338_01/server.112/b56299/functions056.htm#i77384SQL言語リファレンス
NLS_CHARSET_ID
http://docs.oracle.com/cd/E16338_01/server.112/b56299/functions108.htm#i78230