2014년 9월 29일 월요일

Pro*C에서 EXTERNAL LOB (BFILE) 처리 예제 프로그램[컴퓨터/IT/국비교육/무료교육/국비지원/국비지원학원/프로그램/서울자바/서울국비지원/IT국비/안드로이드/아이폰/자바국비]

Pro*C에서 EXTERNAL LOB (BFILE) 처리 예제 프로그램  
  
  
EXTERNAL LOB (BFILE) 처리 예제 프로그램 
Bulletin no : 11344 
-------------------------------------------------------------------------------- 
BFILE type은 화일시스템에 존재하는 FILE을 가리키는 LOCATOR를 저장하는 데이타 
타입이다. 이 LOCATOR는 디렉토리 ALIAS, FILENAME, 기타 상태 정보를 포함하고 
있다. BFILE은 Directory를 통해 access될 수 있다. 

디렉토리란 시스템 상의 물리적 디렉토리를 논리적으로 매핑한 alias명을 말한다. 
이 오브젝트는 시스템 소유로서, 디렉토리를 생성/삭제하기 위해서는 create[drop] 
any directory 권한이 있어야 한다. sys로 connect하여 grant를 실행한다. 

    SQL> grant create any directory to scott; 

디렉토리 생성 시는 실제 디렉토리가 있는지 여부는 확인하지 않는다는 점을 주의 
해야 한다. 현재 생성된 디렉토리와 관련된 정보는 all_directories, 
dba_directories를 조회하면 확인 가능하다. 

Bfile은 pointer 형태로 저장하기 때문에, 여러 record에서 동일한 file을 value 
로 가질 수 있다. file에 대한 처리는 Read만 가능하고, 디렉토리와 마찬가지로 
BFILE 컬럼에 insert 시 oracle process가 read 권한이 있는지 여부는 확인하지 
않는다. 
이는 insert하는 user가 미리 확인해야 한다. 하나의 세션에서 동시에 열 수 있는 
file 개수는 session_max_open_files parameter에 의해 제한받는다. 


1) 사전 수행 SQL 문 

 SQL> connect sys/manager 
 SQL> grant create any directory to scott; 
 SQL> connect scott/tiger 
 SQL> create or replace directory bfile_dir as '/mnt3/rctest80/'; 
 SQL> create table image_file 
  2  (a  varchar2(10), 
  3  b  bfile); 

SQL> desc blobs 
Name                            Null?    Type 
------------------------------- -------- ---- 
ID                                      VARCHAR2(255) 
BLOB_COL                                BLOB 


2) 프로그램 예제 

#include 
#include 

char  username[10] ="ejpark"; 
char  password[10] ="ejpark"; 

char  i_rep_file_dir[20]; 
char  i_rep_file_name[20]; 

void sql_error(); 

main() 


  EXEC SQL WHENEVER SQLERROR DO sql_error("oracle error --"); 
  EXEC SQL CONNECT :username  IDENTIFIED BY :password; 
  printf(" DB connected \n"); 

/* bfile 컬럼을 insert */ 
  EXEC SQL INSERT INTO image_file VALUES 
          ('abc' ,bfilename('BFILE_DIR','a30.bmp') ); 
  printf(" Bfile inserted \n"); 

  EXEC SQL COMMIT ; 


  EXEC SQL EXECUTE 
    DECLARE 
      i_rep_file BFILE; 
      temp_blob  BLOB; 
      v_rqid    NUMBER; 
      len        NUMBER; 
    BEGIN 
        /* bfile 컬럼을 select */  
        SELECT b INTO i_rep_file FROM image_file WHERE a='abc'; 

        IF i_rep_file is not null THEN 
            IF DBMS_LOB.fileisopen(i_rep_file) = 1  THEN 
              DBMS_LOB.fileclose(i_rep_file); 
            END IF; 

          DBMS_LOB.FILEGETNAME(i_rep_file,:i_rep_file_dir,:i_rep_file_name); 
          len := DBMS_LOB.GETLENGTH(i_rep_file); 

        /* 해당 데이타 화일을 읽어 lob table에 insert */      
          INSERT INTO blobs VALUES ('abc', empty_blob()) 
                RETURNING blob_col INTO temp_blob; 
          DBMS_LOB.FILEOPEN(i_rep_file, dbms_lob.file_readonly); 
          DBMS_LOB.LOADFROMFILE(temp_blob,i_rep_file,len); 
          DBMS_LOB.FILECLOSE(i_rep_file); 
          END IF; 
      COMMIT; 
    END; 
  END-EXEC; 

  printf("name %s %s", i_rep_file_dir,i_rep_file_name); 

}  


void sql_error(msg) 
char* msg; 


  char err_msg[130]; 
  int buf_len, msg_len; 

  EXEC SQL WHENEVER SQLERROR CONTINUE; 
  
  printf("\n%s\n",msg); 
  buf_len = sizeof(err_msg); 
  sqlglm(err_msg, &buf_len, &msg_len); 
  printf("%.*s\n", msg_len, err_msg); 

  EXEC SQL ROLLBACK RELEASE; 
  exit(1); 


  
   

 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-272022
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…<nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-111478
53 [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>03-151233
52 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-311392
51 [평일,기업100%환급]SQL기초에서 Schema Object까지 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-311254
50 [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-311083
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-191395
48 [평일주간,평일야간,주말]안드로이드개발자과정 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-111225
47 [평일야간,주말주간]JAVA,Network&JSP&Spring,MyBatis,Hibernate <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-031724
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-272022
45 [기업100%환급,평일주간]자바기초에서 JDBC, Servlet/JSP까지 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-191491
44 [평일야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,Jav… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-141468
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-111478
42 [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-091182
41 [평일야간, 주말]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-011396
40 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-011544
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-011050

댓글 없음:

댓글 쓰기