본문 바로가기

Database/Theory

Database。삽입 SQL(Embedded SQL) - EXEC SQL

728x90
반응형

SQL은 터미널을 통해 대화식으로 직접 사용할 수 있는 질의어인 동시에 C, PL/I, COBOL, Fortran, Ada, Pascal, Java와 같은 범용(호스트) 프로그래밍 언어로 작성된 응용 프로그램 속에 삽입시켜 사용 가능

 

# 삽입 SQL( ESQL : Embedded SQL)

     1) 명령문 앞에 EXEC SQL을 붙여 다른 호스트 언어의 명령문과 쉽게 구별하며 삽입 SQL문 끝은 세미콜론(;)과 같은 종료 심벌 붙여 표시

     2) 실행문과 비 실행문이 있는디 DECLARE CURSOR, BEGIN, END, DECLARE SECTION과 같은 SQL문은 비 실행문임

     3) 호스트 변수(Host Variable) 즉 호스트 프로그램 변수를 포함 할 수 있으며 다른 SQL 필드 이름과 구별하기 위해 콜론(:)을 붙임.

     대화식 SQL 조작문에서 상수 대신 사용하며 검색(SELECT, FETCH) 결과를 저장하는 장소를 나타내기 위해서 INTO절에 나타낼 수 있음

     4) 호스트 변수는 사용하기 전에 반드시 삽입 SQL 선언부인 BEGIN/END DECLARE SECTION속에서 선언되어야 하며 이 삽입 SQL 선언부는 여러 개 있어도 무방함

     5) 모든 삽입 SQL 프로그램은 SQLSTATE라는 5문자로 된 스트링 타입의 호스트 변수를 포함하며 SQL문이 실행되면 실행 상태(성공, 실패, 오류) 표시가 이 SQLSTSTE 변수를 통해 프로그램에 전달.

     전달된 SQLSTATE 변수 값이 "00000"이면 SQL문이 성공적으로 실행된 것이고, "02000"이면 실행은 했지만 아무런 데이터도 검색하지 못했다는 것을 의미.

     SQLSTATE 변수를 사용하지 않고 SQLCODE라는 정수 변수를 사용할 수 도있지만 SQLSTATE 변수를 사용하는 것이 더 표준화된 형식

     6) 호스트 변수의 데이터 타입은 이에 대응하는 데이터베이스 필드의 SQL 데이터 타입과 일치해야 되며 값을 전달받아야 될 필드가 너무 작으면 지정문에서 처음 숫자들이나 문자들이 탈락되고 에러 표시가 프로그램에 전달

     7) 호스트 변수와 데이터베이스 필드의 이름은 같아도 되는데 호스트 변수는 앞에 콜론을 붙여서 쉽게 구별되기 때문

 

EXEC SQL BEGIN DECLARE SECTION;
	[데이터 타입] [변수명];
EXEC SQL END DECLARE SECTION;

[변수명] = [값];

EXEC SQL SELECT [필드1], [필드2]
           INTO :[필드1], :[필드2]
           FROM [테이블명]
          WHERE [필드1] = :[변수명]
        IF (SQLSTATE = "00000")
            ...;
        ELSE
            ...;

 

     8) SQL문을 실행하고 나면 SQLSTATE 변수에 반환된 값을 검사해야 되며 이 과정을 간단히 하기 위해 WHENEVER문 사용

 

EXEC SQL WHENEVER <조건> <행동>;

조건 : SQLERROR이거나 NOT FOUND
행동 : CONTINUE나 GOTO문
728x90
반응형