DBMS 2
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
PREPARE prepare_statement_id FROM { “quoted_string” | :host_variable } ; EXEC SQL insert into customer (customer_num, fname, lname , company) EXEC SQL PREPARE ins_p fromESQL/C Programming
ESQL/C Programming Highlights
Overview
ESQL/C
ESQL/C 프로그램 작성 규칙
ESQL/C 프로그램 컴파일
[링크옵션]include에 지정된 지정된 파일을 찾는 순서
다음과 같은 preprocessor 구문을 사용할 수 있다
EXEC SQL define USERTRANSACTIONS;
EXEC SQL ifdef USERTRANSACTIONS;
EXEC SQL begin work;
EXEC SQL endif;
Host variables
호스트 변수 : SQL 데이터를 저장하는 C 변수
대소문자 구분
SQL 문장안에서 컬럼명과 구분하기 위하여 호스트변수 앞에 : 기호 사용
선언
$ CHAR * desc ;
EXEC SQL begin declare section;
char * desc;
EXEC SQL end declare section;사용
EXEC SQL update customer set zipcode = : zipcode ;
gets (dbname);
EXEC SQL database : dbname;external 이나 static 으로 선언하지 않은 경우자동적으로 local 범위
Database Connections
ESQL/C 구문
CONNECT 구문의 옵션
· EXEC SQL CONNECT TO ‘‘stores@ munish’AS ‘munich_con’;
· EXEC SQL CONNECT TO ‘stores@ munish’ USER :uid USING : passwd ;
· EXEC SQL CONNECT TO DEFAULT ;
· Default 절 사용 후 다음과 같은 문장이 필요
√ DATABASE
√ CREATE DATABASE
√ START DATABASE연결 전환 (switching)
EXEC SQL SET CONNECTION ‘munish _con’;
EXEC SQL SET CONNECTION :connect_id ;
EXEC SQL SET CONNECTION DEFAULT;연결 종료 (disconnecting)
EXEC SQL DISCONNECT :connect_id ;
EXEC SQL DISCONNECT CURRENT ;
EXEC SQL DISCONNECT DEFAULT ;
EXEC SQL DISCONNECT ALL ;Error Handling
SQL 문을 실행한 후 서버에서 SQLCA라 불리는 영역에 feedback 정보를 남긴다
SQLCODE 는 sqlca. sqlcode 값과 같다
에러 메시지를 얻기 위한 함수
SQL 문이 실행되고 다음과 같은 4가지 중 하나의 상태가 된다
성공 외의 나머지 상태에 대한 처리 방법을 exception처리로 제어한다
WHENEVER 문의 scope는 한 소스 파일에서 global 성격을 가진다
long sqlcode ;
char sqlerrm[72] ;
char sqlerrp[8] ;
long sqlerrd[6] ;
struct sqlcaw_s {
char sqlwarn0 ;
char sqlwarn0 ;
char sqlwarn0 ;
char sqlwarn0 ;
char sqlwarn0 ;
char sqlwarn0 ;
char sqlwarn0 ;
char sqlwarn0 ;
} sqlwarn;
} ;
extern structsqlca_s sqlca;
GET DIAGNOSTICS 사용
Indicator 사용
Prepare, Execute
Prepare / Execute 구문
EXECUTE prepare_statement_id [ USING :host_variables ]
단일 SQL문 처리 예
values (0, : fname, :lname , ‘MPS Corp’ );
EXEC SQL insert into items values (: itemsrec);
※ itemsrec 변수는 items 테이블의 컬럼 순서로 선언된 structure 형
PREPARE / EXECUTE 사용
“insert into customer (customer_num, fname , lname, company)
values (0,?,?,?)” ;
EXEC SQL EXECUTE ins_p using : fnam, lname , :company;
PREPARE를 사용하는 이유
Cursor
Cursor 이해
Scroll Cursor
구문
DECLARE cursor_id SCROLL CURSOR [WITH HOLD] FOR select_stmt;
OPEN cursor_id ;
FETCH [position] Cursor_id [INTO host_variable_list] ;
Position : FIRST, LAST, CURRENT, NEXT, PREVIOUS, ABSOLUTE n, RELATIVE n
CLOSE cursor_id ;
FREE Cursor_id ;WITH HOLD 구문
Fetch Buffer Size
FetBufSize=30000 ;
Deferred Prepare
export IFX_DEFERRED_PREPARE=0 (disable)
EXEC SQL set deferred_prepare enabled ;
EXEC SQL set deferred_prepare disabled ;Open-Fetch-Close
export OPTOFC=0 (disable)Autofree
export IFX_AUTOFREE=0 (disable)
For Update Cursor
구문
DECLARE cursor_id CURSOR [WITH HOLD] FOR select_stmt FOR UPDATE ;
OPEN cursor_id ;
FETCH cursor_id [INTO host_variable_list] ;
UPDATE ... WHERE CURRENT OF cursor_id ;
CLOSE cursor_id ;
FREE cursor_id ;
Insert Cursor
구문
DECLARE cursor_id CURSOR FOR insert_stmt ;
OPEN cursor_id ;
PUT cursor_id [ FROM host_variable_list ] ;
FLUSH cursor_id ;
CLOSE cursor_id ;
FREE cursor_id ;