BFILEÀ» ÀÌ¿ëÇÏ¿© À̹ÌÁö¸¦ DB¿¡ ÀúÀå/ÀúÀåµÈ BFILEÀ» ÀÌ¿ëÇÏ¿© »õ·Î¿î À̹ÌÁö »ý¼º ¾Æ·¡ÀÇ µÎ PL/SQL ÇÁ·Î½ÃÀú´Â OSÀÇ binary fileÀ» DBÀÇ BFILE Ä÷³°ú ¿¬°èÇÏ¿© ÀÛ¾÷À» ÇÏ´Â ¿¹Á¦ ÀÔ´Ï´Ù. Load_BFILE_FROM_Image ÇÁ·Î½ÃÀú ÀÌ ÇÁ·Î½ÃÀú´Â µð½ºÅ© »óÀÇ À̹ÌÁö ÆÄÀÏÀ» BFILE Ä÷³¿¡ ÀúÀåÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ÀÌ ÇÁ·Î½ÃÀú´Â SQL¹®Àå¾È¿¡¼­ BFILENAME ÇÔ¼ö¸¦ »ç¿ë ÇÏ¿© BFILE Ä÷³À» UPDATE ÇÕ´Ï´Ù. ¿©±â¼­ ÁÖÀÇ ÇÒ Á¡Àº À̹ÌÁö°¡ µð½ºÅ© »ó¿¡ Á¸Àç ÇÒ »Ó DB¿¡´Â ÀúÀå µÇÁö ¾Ê´Â ´Ù´Â °ÍÀ» ¸í½ÉÇØ¾ß ÇÕ´Ï´Ù. Áï BFILE Ä÷³Àº OS»óÀÇ ÆÄÀÏ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÀúÀå ÇÑ´Ù°í º¸¸é µË´Ï´Ù. Write_BFILE_To_File ÇÁ·Î½ÃÀú ÀÌ ÇÁ·¯½ÃÀú´Â ±×·¡ÇÈ ÆÄÀÏ µîÀ» ³»¿ëÀ» ±â ÀúÀåµÈ BFILE ÂüÁ¶¸¦ ÀÌ¿ëÇÏ¿© ¾î¶»°Ô ´Ù½Ã µð½ºÅ©¿¡ ¾²´ÂÁö¿¡ ´ëÇØ ¿¹¸¦ µé°í ÀÖ½À´Ï´Ù. À̶§ UTL_FILE.PUT_RAW ÇÁ·Î½ÃÀú¸¦ ÀÌ¿ëÇÏ¿© BFILE Ä÷³ÀÇ Æ÷ÀÎÅ͸¦ Àоî Çϳª¾¿ µð½ºÅ©¿¡ ±â·Ï ÇÏ°Ô µË´Ï´Ù. ¶ÇÇÑ DBMS_LOB.READ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© BFILE ÂüÁ¶·ÎºÎÅÍ ³¹³¹ÀÌ ÀÐ¾î µé¿© À̸¦PL/SQL RAW º¯¼ö¿¡ ³Ö½À´Ï´Ù. ¾Æ·¡ÀÇ ¿¹¸¦ Âü°í ÇÕ´Ï´Ù. 1. Å×½ºÆ®¸¦ À§ÇÑ Å×À̺í, µð·ºÅ丮¸¦ ¸¸µì´Ï´Ù. SQL> CREATE TABLE test_bfile ( 2 id NUMBER(15) 3 , file_name VARCHAR2(1000) 4 , image BFILE 5 , timestamp DATE 6 ) 7 / Å×À̺íÀÌ »ý¼ºµÇ¾ú½À´Ï´Ù. SQL> CREATE OR REPLACE DIRECTORY 2 EXAMPLE_LOB_DIR 3 AS 4 'd:\LOBs' 5 / µð·ºÅ丮°¡ »ý¼ºµÇ¾ú½À´Ï´Ù. 2. Load_BFILE_From_Image ÇÁ·¯½ÃÀú¸¦ ¸¸µì´Ï´Ù. (d:\LOBs Æú´õ¿¡ oraclejava_logo.gif ÆÄÀÏÀ» º¹»çÇØ µÓ´Ï´Ù. ÆÄÀÏ À̸§Àº ÀûÀýÈ÷ ¼öÁ¤ ÇÏ½Ã¸é µË´Ï´Ù) CREATE OR REPLACE PROCEDURE Load_BFILE_From_Image IS BEGIN DBMS_OUTPUT.ENABLE(100000); INSERT INTO test_bfile (id, file_name, image, timestamp) VALUES (1001, 'oracle9i_logo.gif', null, sysdate); UPDATE test_bfile SET image = BFILENAME('EXAMPLE_LOB_DIR', 'oraclejava_logo.gif') WHERE id = 1001; END; 3. Write_BFILE_To_File ÇÁ·¯½ÃÀú¸¦ ¸¸µì´Ï´Ù. CREATE OR REPLACE PROCEDURE Write_BFILE_To_File IS source_pic BFILE; buffer RAW(32767); buffer_size CONSTANT BINARY_INTEGER := 32767; amount BINARY_INTEGER; offset NUMBER(38); file_handle UTL_FILE.FILE_TYPE; directory_name CONSTANT VARCHAR2(80) := 'EXAMPLE_LOB_DIR'; image_filename CONSTANT VARCHAR2(80) := 'oraclejava_logo2.gif'; dest_pic BFILE; BEGIN DBMS_OUTPUT.ENABLE(100000); -- ----------------- -- GET BFILE LOCATOR -- ----------------- SELECT image INTO source_pic FROM test_bfile WHERE id = 1001; -- --------------------------------------- -- OPEN ORIGINAL BFILE IMAGE USING LOCATOR -- --------------------------------------- DBMS_LOB.FILEOPEN( file_loc => source_pic, open_mode => DBMS_LOB.FILE_READONLY); -- --------------------------------- -- OPEN NEW IMAGE FILE IN WRITE MODE -- --------------------------------- file_handle := UTL_FILE.FOPEN( location => directory_name, filename => image_filename, open_mode => 'w', max_linesize => buffer_size); amount := buffer_size; offset := 1; -- --------------------------------------------------- -- READ FROM BFILE IMAGE / WRITE OUT NEW IMAGE TO DISK -- --------------------------------------------------- WHILE amount >= buffer_size LOOP DBMS_LOB.READ( file_loc => source_pic, amount => amount, offset => offset, buffer => buffer); offset := offset + amount; UTL_FILE.PUT_RAW( file => file_handle, buffer => buffer, autoflush => false); END LOOP; UTL_FILE.FCLOSE(file => file_handle); DBMS_LOB.FILEOPEN(file_loc => source_pic); -- -------------------------------------------- -- INSERT THE NEW IMAGE FILE AS A SECOND RECORD -- -------------------------------------------- INSERT INTO test_bfile (id, file_name, image, timestamp) VALUES (1002, 'oraclejava_logo2.gif', null, sysdate); UPDATE test_bfile SET image = BFILENAME('EXAMPLE_LOB_DIR', 'oraclejava_logo2.gif' ) WHERE id = 1002; COMMIT; * END; / ÇÁ·Î½ÃÀú°¡ »ý¼ºµÇ¾ú½À´Ï´Ù. 4. SQL*Plus ¿¡¼­ Å×½ºÆ® ÇÕ´Ï´Ù. SQL> set serveroutput on SQL> exec Load_BFILE_From_Image PL/SQL 󸮰¡ Á¤»óÀûÀ¸·Î ¿Ï·áµÇ¾ú½À´Ï´Ù. SQL> exec Write_BFILE_To_File PL/SQL 󸮰¡ Á¤»óÀûÀ¸·Î ¿Ï·áµÇ¾ú½À´Ï´Ù. SQL> SQL> SQL> SELECT id, DBMS_LOB.GETLENGTH(image) Length FROM test_bfile; ID LENGTH ---------- ---------- 1001 910 1002 916 Âü°í) ÀÌÁ¦ Ž»ö±â¿¡¼­ º¸¸é oraclejava_logo2.gif°¡ »ý°Ü ³µÀ½À» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·±µ¥ ÀÌ ÆÄÀÏÀº ¿ø·¡ÀÇ oraclejava_logo.gif º¸´Ù »çÀÌÁî°¡ Á¶±Ý Å«µ¥ ±× ÀÌÀ¯´Â UTL_FILE.PUT_RAW ÇÁ·¯½ÃÀú¿¡¼­ CR/LF°¡ Ãß°¡ µÇ¾î¼­ ±×·¯ÇÕ´Ï´Ù. [Ãâó] ¿À¶óŬÀÚ¹ÙÄ¿¹Â´ÏƼ - http://www.oraclejavanew.kr/bbs/board.php?bo_table=oracleTip&wr_id=495