210 likes | 469 Vues
제 6 장 삽입 SQL. 1. 개요. 2. 삽입 SQL 처리 절차. 3. 삽입 SQL 형식. 4. 커서 이용 방식. 5. 오류 처리 기법. 6. 삽입 , 삭제 , 갱신 방식. 7. 동적 SQL. 1. 개 요. 데이터베이스 사용자가 직접 키보드를 이용하여 DBMS 를 직접 이용하는 대화식 (interactive) SQL 만으로는 일반적인 데이터베이스 응용은 불가능하다 .
E N D
제 6 장 삽입 SQL 1. 개요 2. 삽입 SQL 처리 절차 3. 삽입 SQL 형식 4. 커서 이용 방식 5. 오류 처리 기법 6. 삽입, 삭제, 갱신 방식 7. 동적 SQL
1. 개 요 • 데이터베이스 사용자가 직접 키보드를 이용하여 DBMS를 직접 이용하는 대화식(interactive) SQL 만으로는 일반적인 데이터베이스 응용은 불가능하다. • 데이터베이스 응용을 이용하는 최종사용자는 대부분 DBMS 를 자유자재로 이용할 수 있는 능력이 없으며 그러한 능력을 가져야 할 필요또한 없다. • 데이터베이스 응용 중 동일한 내용을 반복적으로 처리해야 하는 업무 (각종 예약업무나 등록업무)는 삽입 SQL 을 이용하여 응용 프로그램을 개발한 후 최종 사용자에게 제공한다.
2. 삽입 SQL 처리 절차 • 삽입 SQL 을 이용한 프로그램은 호스트 언어의 예비 컴파일러를 통하여 호스트 언어 형식으로 번역. • 번역 결과물은 호스트 언어 컴파일러를 통하여 오브젝트 모듈로 번역.
삽입 SQL 처리 절차 … ESQLC SQL select s_no, s_name from student where dept=‘컴퓨터공학과’; .. . 삽입 SQL 질의어 부분 Precompiler … Call SQL 문장 함수 ... 호스트 언어의 대당 함수로 번역 호스트 언어 Compiler 오브젝드 모듈
3. 삽입 SQL 형식 • 3.1 삽입 SQL문의 시작 - 삽입 SQL 문을 원시 프로그램에서 사용하려면 삽입 SQL 문 앞에 exec sql문을 먼저 기입하여야 한다. • 예제 1 • <그림 5-4>의 학생(STUDENT) 릴레이션에서 컴퓨터공학과에 재학 중인 • 학생 수를 검색하여 호스트 변수인 nbrOfSt에 저장하라. • exec sql select count(*) into :nbrOfSt • from student • where dept = '컴퓨터공학과';
3 .2 호스트 문의 선언부 형식 • 삽입 SQL 프로그램에서 사용하는 변수는 범용 프로그래밍 언어에서와 같이 변수 선언이 필요하며 호스트 변수의 선언은 begin declare section과 end declare section 사이에 정의한다. 이것을 호스트 변수의 선언부라 한다. • 예제 2 • <예제 1>에서 사용한 호스트 변수인 nbrOfSt를 정수형 변수로 선언하는 • SQL 문을 작성하라. • exec sql begin declare section; • int nbrOfSt; • exec sql end declare section;
4. 커서 이용 방법 • 삽입 SQL 프로그램 작성 시에 데이터베이스의 투플을 검색하는 경우는 2가지이다. - 하나의 투플만을 검색하는 것. - 복수개의 투플을 검색하는 것. • 삽입 SQL 문에서 커서를 사용하는 단계 - 커서를 선언한다. • exec sqldeclare 커서_이름cursor for • 예제 3 • 소속학과를 호스트 변수로 입력받아 그 값과 동일한 학과에 재직 중인 • 교수의 교수번호, 이름, 직급을 검색하기 위한 커서를 선언하라. • 단, 커서 이름은 prof_cur로 정의하라. • exec sqldeclare prof_cur cursor for • select p_no, p_name, grade • from professor • where dept_no = :dept_no;
4. 커서 이용 방법 - 커서를 선언한 후에는 커서를 개방한다. - 커서를 개방한 후에는 fetch 문을 이용하여 결과 투플을 검색한다. • 예제 4 • <예제 3>에서 정의한 prof_cur 커서를 개방하라. • exec sqlopen prof_cur; • exec sqlfetch 커서_이름into 호스트변수+; • 예제 5 • <예제 3>의 select문이 검색한 결과를 호스트 변수로 검색하는 fetch∼into문을 • 작성하라. • exec sqlfetch prof_cur into :p_no, :p_name, :dept_no;
4. 커서 이용 방법 - 커서의 사용이 완료된 후에는 커서를 닫는다. • 예제 6 • <예제 3>부터 <예제 5>까지 사용한 prof_cur 커서를 닫아라. • exec sqlclose prof_cur;
5. 오류 처리 기법 • 삽입 SQL 프로그램에서 발생하는 오류를 처리하는 방법 - 첫번째 : X/OPEN SQL 표준에서 지원하는 sqlstate를 이용하는 것. - 두번째 : sqlca(SQL Communication Area : SQL 통신영역 ) 을 이용하는 것. • 5. 1 sqlstate 이용방식 - 삽입 SQL문의 실행 상태를 나타내는 변수인 sqlstate를 이용하여 오류를 처리할 수 있으며, 이 때 이용하는 문장이 whenever문이다 • exec sql whenever조건 적용연산;
Whenever문의 조건과 적용연산 요약 사 용 내 용 의 미 조 건 (condition) sqlerror 오 류 not found 투플이 없음 sqlwarning 경 고 적용연산 (action) continue 프로그램의 흐름을 지속적으로 진행시킨다. goto 레이블 레이블 이름으로 표시된 곳으로 제어를 이동시킨다. stop 프로그램의 실행을 종료시킨다. call 함 수 조건에 따라 필요한 함수를 호출한다. • 예제 7 • sqlstate변수 값에 오류 조건이 존재하면 연산 실행을 중지하는 문장을 • 작성하라. • exec sqlwhenever sqlerror stop;
5.2 sqlca 이용 방식 • sqlca는 데이터베이스 시스템과 프로그램간에 정보를 전달하기 위한 기억 공간이다. 삽입 SQL문 실행 시에 오류가 발생하면 데이터베이스 시스템은 sqlca에 오류 상태를 저장한다. • exec sqlinclude sqlca;
6. 삽입, 삭제, 갱신 방식 6.1 삽입 방식 - value 절을 이용하여 투플을 직접 삽입하는 방법. - 부속 질의어를 이용하여 복수 개의 투플을 삽입하는 방법. <투플의 직접 삽입> exec sql insert into테이블[(열_이름_리스트)] values (열값_리스트); <부속 질의어를 이용한 삽입> exec sql insert into테이블[(열_이름_리스트)] select문;
6. 1 삽입 방식 • 예제 8 • 호스트 변수(:no, :name, :grade, :dept) 값으로 입력받는 내용을 제5장의 • 교수(PROFESSOR) 릴레이션에 삽입하는 문장을 작성하라. • exec sql insert • into professor(p_no, p_name, grade, dept_no) • values (:no, :name, :grade, :dept);
6. 2 삭제 방식 • 예제 9 • 교수(PROFESSOR) 릴레이션에 저장된 모든 투플을 삭제하는 문장을 작성하라. • exec sql delete • from professor; • 예제 10 • 호스트 변수(no)로 입력받은 값과 동일한 교수번호를 가진 교수 투플을 • 교수(PROFESSOR) 릴레이션에서 삭제하는 문장을 작성하라. • exec sql delete • from professor • where p_no = :no;;
6. 2 삭제 방식 • 예제 11 • prof_cur 커서가 가리키는 교수 투플을 교수(PROFESSOR) 릴레이션에서 • 삭제하는 문장을 작성하라. • exec sql delete • from professor • current of prof_cur;
6. 3 갱신 방식 - 탐색 후 갱신(searched update) 방식. - 위치 갱신(positioned update) 방식. <탐색 후 갱신> exec sql update 테이블 set {열_이름=산술식}+ [where조건]; <위치 갱신> exec sql update 테이블 set {열_이름=산술식}+ current of 커서_이름;
6. 3 갱신 방식 • 예제 12 • 교수(PROFESSOR) 릴레이션에 저장된 모든 투플들에 대하여 pay_step 값을 • 1씩 증가시키는 문장을 작성하라. • exec sql update professor • set pay_step = pay_step+1; • 예제 13 • 호스트 변수(no)로 입력받은 값과 동일한 교수번호를 가진 교수 투플의 • 전화번호(p_tel)를 1281로 변경하는 문장을 작성하라. • exec sql update professor • set p_tel = 1281 • where p_no = :no;
6. 3 갱신 방식 • 예제 14 • prof_cur 커서가 가리키는 교수 투플의 직급(grade)을 조교수로 변경하는 • 문장을 작성하라. • exec sql update professor • set grade = 조교수 • current of prof_cur;
7. 동적 SQL • 사용자의 입력 형식이 매우 다양하여 미리 예측이 불가능할 경우에는 정적 SQL을 이용 할 수가 없다. • 이러한 경우에는 동적 SQL(dynamic SQL) 을 사용한다.