DBMS_LOB.LoadClobFromFileプロシージャを使ってテキストファイルを Oracle Database の CLOB型列 に ロードする。
表題の通り、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#i998978 SQL言語リファレンス BFILENAME http://docs.oracle.com/cd/E16338_01/server.112/b56299/functions019.htm#i76871 SQL言語リファレンス EMPTY_BLOB、EMPTY_CLOB http://docs.oracle.com/cd/E16338_01/server.112/b56299/functions056.htm#i77384 SQL言語リファレンス NLS_CHARSET_ID http://docs.oracle.com/cd/E16338_01/server.112/b56299/functions108.htm#i78230
Qiita にも書いたやで!彡(^)(^)
http://qiita.com/ora_gonsuke777/items/f4d06f1ba5122fcd5f22