subsay
관계 데이터베이스 모델과 언어 - 내장 SQL 본문
1. 내장 SQL(Embedded SQL)의 정의
내장 SQL은 응용 프로그램 내에 데이터베이스에서 사용하는 데이터를 정의하거나 질의하는 SQL 문장을 내포하여 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어*로 만든 프로그램에 삽입된 SQL이다.
*호스트 프로그램 언어
PASCAL, COBOL, C, C++, Visual BASIC 같은 프로그밍 언어를 말합니다.
2. 내장 SQL의 특징
- 내장 SQL 실행문은 호스트 언어에서 실행문이 나타날 수 있는 곳이면 프로그램의 어느 곳에서나 사용할 수 있다.
- 일반 SQL문은 수행 결과로 여러 개의 튜플을 반환하는 반면, 내장 SQL은 단 하나의 튜플만을 반환한다.
- 내장 SQL문에 의해 반환되는 튜플은 일반 변수를 사용하여 지정할 수 있다.
- Host Program의 컴파일 시 내장 SQL문은 선행처리기에 의해 분리되어 컴파일 된다.
- 호스트 변수와 데이터베이스 필드의 이름은 같아도 된다.
- 내장 SQL문은에 사용된 호스트 변수의 데이터 타입은 이에 대응하는 데이터베이스 필드의 SQL 데이터 타입과 일치하여야 한다.
- 내장 SQL문이 실행되면 SQL 실행의 상태가 SQL 상태 변수*에 전달된다.
*SQL 상태 변수
삽입 SQL문 실행 후 SQLCODE라는 묵시적 변수에 성공, 실패, 오류 등의 결과를 정수 값으로 전달합니다.
- 0 : 성공
- 100 : NOT FOUND
- 양수 : 경고
- 음수 : 에러
※ SQL2에서는 SQLSTATE라는 변수를 사용합니다.
- 00000 : 성공
- 02000 : NOT FOUND
3. 호스트 언어의 실행문과 구분시키는 방법
프로그램에서 호스트 실행문과 내장 SQL문을 구분하기 위한 방법이다.
명령문의 구분
- C/C++에서 내장 SQL문은 $와 세미콜론(;) 문자 사이에 기술한다.
- Visual BASIC에서는 내장 SQL문 앞에 'EXEC SQL'을 기술한다.
변수의 구분
내장 SQL에서 사용하는 호스트 변수는 변수 앞에 콜론(:) 문자를 붙인다.
4. 커서(Cursor)
- 커서(Cursor)는 내장 SQL문의 수행 결과로 반환될 수 있는 복수의 튜플들을 엑세스 할 수 있도록 해주는 개념이다.
- 커서는 질의 수행 결과로 반환되는 첫 번째 튜플에 대한 포인터로 생각할 수 있다.
- 커서를 사용하여 질의 결과로 반환될 수 있는 튜플들을 한 번에 하나씩 차례로 처리 할 수 있다.
커서 관련 명령어
- DECLARE : 커서를 정의하는 등 커서에 관련된 선언을 하는 명령
- OPEN : 커서가 질의 결과의 첫 번째 튜플을 포인트하도록 설정하는 명령
- FETCH : 질의 결과의 튜플들 중 현재의 다음 튜플로 커서를 이동 시키는 명령
- CLOSE : 질의 수행 결과에 대한 처리 종료 시 커서를 닫기 위해 사용하는 명령
*호스트 언어에서 내장 SQL 커서 사용 예
EXEC SQL BEGIN DECLARE SECTION
int department;
int salary;
EXEC SQL END DECLARE SECTION
EXEC SQL DECLARE PERSON CURSOR FOR
SELECT SALARY
FROM EMPLOYEE
WHERE DEPARTMENT = :DEPARTMENT;
EXEC SQL OPEN PERSON;
EXEC SQL FETCH PERSON INTO :salary;
while (SQLSTATE =="00000")
{EXEC SQL UPDATE EMPLOYEE
SET SALARY = SALARY / 0.9
WHERE CURRENT OF PERSON;
EXEC SQL FETCH PERSON INTO :salary;}
EXEC SQL CLOSE PERSON;
'정보처리 기사' 카테고리의 다른 글
관계 데이터베이스 모델과 언어 - 시스템 카탈로그 (0) | 2017.10.10 |
---|---|
관계 데이터베이스 모델과 언어 - 뷰(View) (0) | 2017.10.10 |
관계 데이터벵스 모델과 언어 - DML - INSERT, DELETE, UPDATE (0) | 2017.09.30 |
관계 데이터베이스 모델과 언어 - DML - SELECT (0) | 2017.09.30 |
관계 데이터베이스 모델과 언어 - DDL (0) | 2017.09.28 |