1. 내장(Embedded) SQL의 개념
내장 SQL은 데이터베이스 내의 데이터를 정의하거나 접근하는 SQL문을 응용 프로그램 내에 내포하여 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어에 삽입한 SQL이다.
2. 내장 SQL의 특징
- 호스트 프로그램 언어에서 실행문이 나타날 수 있는 곳이면 프로그램의 어느곳에서나 사용할 수 있다.
- 실행 결과가 여러 개의 튜플이어도 맨 처음의 튜플 하나만을 반환한다.
반환되는 튜플은 일반 변수를 사용하여 저장할 수 있다.
호스트 프로그램 변수와 데이터베이스 필드의 이름은 같아도 된다.
3. 내장 SQL과 호스트 언어의 실행문 구별
(1) 명령문의 구분
- C/C++에서 내장 SQL문은 "EXEC SQL"과 세미콜론(;) 문자 사이에 기술한다.
- 자바에서는 #SQL{<내장 SQL문>}; 이런 형식으로 사용한다.
(2) 변수의 구분
- 내장 SQL문에서 사용하는 호스트 변수는 변수 앞에 콜론(:) 문자를 붙인다.
- 호스트 언어 내에서 호스트 변수는 콜론(:) 없이 그대로 사용한다.
4. 커서 (Cursor)
- 내장 SQL문의 실행 결과로 반환된 복수 개의 튜플들을 접근할 수 있도록 해주는 개념
- 질의 실행 결과로 반환된 테이블의 튜플들을 순서대로 가리키는 튜플에 대한 포인터로 생각할 수 있다.
- 커서 관련 명령어
* DECLARE : 커서를 정의하는 등 커서에 관련된 선언을 하는 명령어
* OPEN : 커서가 질의 결과의 첫 번째 튜플을 가리키도록 설정하는 명령어
* FETCH : 질의 결과에 대한 튜플들 중 현재의 다음 튜플로 커서를 이동시키는 명령어
* CLOSE : 질의 실행 결과에 대한 처리 종료 시 커서를 닫기 위해 사용하는 명령어
5. 사용 예제
< 요구사항 >
< 직원 테이블 스키마 >
직원(직원번호, 주민등록번호, 입사년도, 이름, 부서명, 연봉, 전화번호)
* 직원의 재직년도가 5년, 10년, 15년 이상일 경우, 각각 연봉의 5%, 10%, 15%를 인상한다.
* 올해는 2011년이다.
< 내장 SQL을 사용하여 작성한 프로그램 >
salaryIncrease()
{
EXEC SQL BEGIN declare section;
char SQLSTATE[6];
EXEC SQL END declare section;
EXEC SQL DECLARE employeeCur CURSOR FOR 직원;
EXEC SQL OPEN employeeCur;
while(1) {
EXEC SQL FETCH employeeCur;
if(!(strcmp(SQLSTATE,"02000"))) break;
if(2011 - 입사년도 >= 15)
EXEC SQL UPDATE 직원
SET 연봉 = 연봉 + (연봉*0.15)
WHERE CURRENT OF employeeCur;
else if (2011 - 입사년도 >= 10)
EXEC SQL UPDATE 직원
SET 연봉 = 연봉 + (연봉*0.1)
WHERE CURRENT OF employeeCur;
else if (2011 - 입사년도 >= 5)
EXEC SQL UPDATE 직원
SET 연봉 = 연봉 + (연봉*0.05)
WHERE CURRENT OF employeeCur;
}
EXEC SQL CLOSE employeeCur;;
}
[참고] 2011 시나공 정보처리기사 실기 문제집
'Dev. 관련자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기 - 데이터베이스] 정규화 (Normalization) (0) | 2012.10.13 |
---|---|
[정보처리기사 실기 - 데이터베이스] 스토어드 프로시저 (Stored Procedure) (0) | 2012.10.13 |
[정보처리기사 실기 - 데이터베이스] 뷰 (View) (0) | 2012.10.13 |
[정보처리기사 실기 - 데이터베이스] 고급 데이터베이스 (0) | 2012.10.13 |
[정보처리기사 실기 - 데이터베이스] 객체 지향 데이터베이스 (0) | 2012.10.13 |