[정보처리기사 실기 - 데이터베이스] 내장 SQL과 커서(Cursor) 사용 예제 :: 소림사의 홍반장!

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. 관련자격증/정보처리기사 카테고리의 포스트를 톺아봅니다