Embedded SQL
태그 :
- 개념
- 데이터베이스내의 데이터를 정의하거나 접근하는 SQL문을 응용 프로그램 내에서 포함되어 실행될 때 함께 실행되도록 호스트 프로그램 언어에 삽입된 SQL
1. 응용프로그램에 삽입시켜 사용하는 SQL, Embeded SQL 개요
가. Embedded SQL의 정의
- 데이터베이스내의 데이터를 정의하거나 접근하는 SQL문을 응용 프로그램 내에서 포함되어 실행될 때 함께 실행되도록 호스트 프로그램 언어에 삽입된 SQL
- 호스트 프로그램 언어 : PASCAL, COBOL, C, C++, Visual Basic 같은 프로그래밍 언어
나. Embedded SQL의 특징
- Embeded SQL문은 호스트 프로그램 언어에서 실행문이 나타날 수 있는 곳이면 프로그램의 어느 것에서나 사용될 수 있다.
- 일반 SQL문은 실행 결과로 여러 개의 튜플을 반환하는 반면, Embeded SQL문은 단 하나의 튜플만 반환
- Embeded SQL문에 의해 반환되는 튜플은 일반 변수를 사용하여 저장할 수 있음
- 호스트 프로그램의 컴파일시 선행 처리기(Preprocessor)에 의해 분리 되 어 컴파일됨
- 호스트 프로그램 변수와 데이터베이스 필드의 이름은 같아도 됨
- Embeded SQL 문의 호스트 프로그램 변수의 데이터 타입은 이에 대응하는 데이터베이스 필드의 SQL 데이터 타입과 일치하여야 함
- SQLCODE라는 묵시적 SQL 상태 변수에 성공, 실패, 오류 등의 실행 결과를 문자열(또는 정수)값으로 전달
다. Embedded SQL의 Compile 개념도
선행 처리기(Preprocessor)에 의해 분리 되어 컴파일
2. Embeded SQL과 호스트 언어의 실행문의 구별
가. 명령문 구분
Embedded sql문을 선행 처리기가 식별할 수 있도록 하기 위해 다음과 같은 형식을 사용
EXEC SQL <Embeded SQL문> END-EXEC
Embeded SQL문의 사용은 SQL이 삽입될 호스트 언어에 따라 다름
C/C++ 언어에서는 END-EXEC 대신에 세미콜론(;) 사용
JAVA언어에서는 다음과 같은 형식을 사용
- #SQL { <Embeded SQL문> }
나. 변수의 구분
- 변수의 구분
- Embeded SQL문에서 사용하는 호스트 변수는 변수 앞에 콜론(:) 문자를 붙임.
- 호스트 언어 내에서 호스트 변수는 콜론(:)없이 그대로 사용
3. 복수개의 튜플처리를 위한 Cursor
가. Cursor 개념 및 특징
- Cursor는 Embeded SQL문의 실행 결과로 반환될 수 있는 복수개의 튜플들에 접근할 수 있도록 해주는 개념
- Cursor는 SQL 실행 결과로 반환되는 테이블의 튜플들을 순서대로 가리키는 튜플에 대한 포인터
- Cursor를 사용하여 질의 결과로 반환될 수 있는 튜플들을 한번에 하나씩 순차적 처리
나. Cursor 관련 명령어
- Declare : Cursor를 정의하는 등 Cursor에 관련된 선언을 하는 명령어
- OPEN : Cursor가 질의 결과의 첫 번째 튜플을 포인트하도록 설정하는 명령 어
- FETCH : 질의 결과의 튜플들 중 현재의 다음 튜플로 Cursor를 이동시키는 명령어
- CLOSE : 질의 실행 결과에 대한 처리 종료 시 Cursor를 닫기 위해 사용하는 명령어
◆ 이중 모드(dual mode) 원리 • 터미널에서 대화식으로 사용할 수 있는 모든 SQL 문 → 응용 프로그램(Interactive and Embedded form)에서 사용 가능 ◆ 삽입 SQL 포함하는 응용 프로그램의 특징 • 명령문 앞에 EXEC SQL을 붙임 • 삽입 SQL 실행문은 호스트 실행문이 나타나는 어느 곳에서나 사용 가능 • SQL문에 사용되는 호스트 변수는 콜론(:)을 앞에 붙임 • EXEC SQL DECLARE문으로 사용할 테이블을 선언 • 호스트변수 SQLSTATE를 포함 -피드백 정보 - SQLSTATE =”00000” : 성공 ≠”00000” : 경고 (warning) 또는 에러 • 호스트 변수와 대응하는 필드의 데이터 타입이 일치 |
◆ 단일 레코드 검색(Singleton SELECT) • 검색된 테이블이 한 개 이하의 행만을 가지는 SELECT문 EXEC SQL SELECT Sname, Dept INTO :sname, :dept FROM STUDENT WHERE Sno = :sno: ◆ 갱신 EXEC SQL UPDATE ENROL SET Final – Final + :new WHERE Cno = ‘C413’: ◆ 삭제 EXEC SQL DELETE FROM ENROL WHERE Sno = :sno: ◆ 삽입 EXEC SQL INSERT INTO STUDENT(Sno,Sname,Dept) VALUES (:sno,:sname,:dept): |
◆ 커서(cusor) • SELECT 문과 호스트 프로그램 사이를 연결 • SELECT 문으로 검색되는 여러 개의 레코드(투플)에 대해 정의 • 활동 세트(active set) : SELECT 문으로 검색된 여러 개의 레코드 • 실행 시에는 활동 세트에 있는 레코드 하나를 지시
◆ 복수 레코드의 검색 예 |