내장 SQL(Embedded SQL, 삽입 SQL) 개념
- 내장 SQL은 데이터 베이스 내의 데이터를 정의하거나 접근하는 SQL문을 응용프로그램 내에 내포하여 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어에 삽입한 SQL이다.
내장 SQL 특징
- 응용 프로그램에 삽입되어 사용되는 SQL이다.
- 내장 SQL 실행문은 호스트 실행문이 나타나는 곳이면 어디든 사용이 가능하다.
- 일반 SQL문은 실행 결과로 여러 개의 튜플을 반환하는 반면, 내장 SQL문은 실행 결과가 여러개의 튜플이어도 맨 처음의 튜플 하나만을 반환한다.
- 내장 SQL문에 의해 반환되는 튜플은 일반 변수를 사용하여 저장할 수 잇다.
- 호스트 프로그램 변수와 데이터베이스 필드의 이름은 같아도 된다.
- SQL 문장의 식별자로서 ‘EXEC SQL' 을 앞에 붙여 다른 호스트 명령문과 구별한다.
- JAVA에서는 #SQL{<내장 SQL문>}
- SQL 문에 사용되는 호스트 변수는 콜론(:)을 앞에 붙인다.
- 내장 SQL 문의 호스트 변수의 데이터 타입은 이에 대응하는 데이터베이스 필드의 SQL 데이터 타입과 일치해야 한다.
- 내장 SQL문이 실행되면 SQL 실행 상태가 SQL 상태 변수에 전달된다.
* SQL 상태변수
SQLSTATE값이 '00000'이면 내장 SQL이 성공적으로 실행된 것을 의미하고, '02000'이면 검색된 결과가 없다는 것을 의미.
ex)
EXEC SQL BEGIN DECLARE SECTION;
int SNO;
char SNAME[20];
char DEPT[6];
char SQLSTATE[5];
EXEC SQL END DECLARE SECTION;
SNO=100;
EXEC SQL SELECT SNAME, DEPT
INTO :SNAME, :DEPT <----위에서 선언한 호스트 변수.
FROM STUDENT
WHERE SNO=:SNO;
IF(SQLSTATE=='00000')
THEN...;
ELSE...;
커서(Cursor)
- 커서는 내장 SQL문의 실행결과로 반환된 복수 개의 튜플들을 접근할 수 있도록 해주는 개념이다.
- 커서는 질의 실행결과로 반환된 테이블의 튜플들을 순서대로 가리키는 튜플에 대한 포인터로 생각할 수 있다.
- 커서를 사용하여 질의 결과로 반환된 튜플들을 한 번에 하나씩 차례로 처리할 수 있다.
- 커서 관련 명령어
DECLARE : 커서를 정의하는 등 커서에 관련된 선언을 하는명령어
OPEN :커서가 질의 결과의 첫번째 튜플을 가리키도록 설정하는 명력어
FETCH :질의 결과에 대한 튜플들 중 현재의 다음 튜플로 커서를 이동시키는 명령어
CLOSE :질의 실행 결과에 대한 처리 종료 시 커서를 닫기 위해 사용하는 명령어
ex)
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 * 1.1
WHERE CURRENT OF person; <---커서 'person'이 실행되어 가리키는 현재의 튜플만 대상으로 한다.
EXEC SQL FETCH person INTO :salary;}
EXEC SQL CLOSE person;
'Programming > DataBase' 카테고리의 다른 글
[DataBase] 이상 (Anomaly) (0) | 2013.06.28 |
---|---|
[DataBase] 스토어드 프로시저 (Stored Procedure) (0) | 2013.06.28 |
SQL - DCL (0) | 2013.06.26 |
SQL - DML (0) | 2013.06.26 |
SQL - JOIN (0) | 2013.06.26 |