1 / 40

5 장 SQL 질의어

5 장 SQL 질의어. 예제 데이터베이스. 학과 (DEPARTMENT). 학과코드 DEPT_NO. 학과명 DEPT_NAME. 학과명 DEPT_NAME. 학과장 CHIEF. 조교 ASSISTANT. 전화 DEPT_TEL. 위치 LOCATION. 001 002 003 :. 컴퓨터공학과 정보과학과 정보통신학과. 0001 0015 0022. 이지은 김영미 박순애. 3333 3334 3335. T101 T201 T301. 교수 (PROFESSOR). 교수번호 P_NO.

trish
Download Presentation

5 장 SQL 질의어

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 5장 SQL 질의어

  2. 예제 데이터베이스 학과(DEPARTMENT) 학과코드 DEPT_NO 학과명 DEPT_NAME 학과명 DEPT_NAME 학과장 CHIEF 조교 ASSISTANT 전화 DEPT_TEL 위치 LOCATION 001 002 003 : 컴퓨터공학과 정보과학과 정보통신학과 0001 0015 0022 이지은 김영미 박순애 3333 3334 3335 T101 T201 T301 교수(PROFESSOR) 교수번호 P_NO 이름 P_NAME 직급 GRADE 연구실 ROOM_NO 전화 P_TEL 주소 P_ADDRESS 생년월일 P_BIRTH 입사일 JOIN_DATE 호봉 PAY_STEP 0001 0002 0003 : 김수철 이기문 박동진 교 수 교 수 부교수 T102 T103 T302 4444 4445 4555 서울… 서울… 서울… 19520401 19540605 19610105 00880301 00890901 00910301 4444 4445 4555 강좌(COURSE) 강좌번호 C_NO 강좌이름 C_NAME 시수 TIMES 학점 POINT 필수/선택 R/O 0001 0002 0003 0004 : 정보사회와 컴퓨터 데이터베이스 네트워크 C언어 3 3 3 3 3 3 3 3 R R R O

  3. 예제 데이터베이스 학생(STUDENT) 학번 S_NO 이름 S_NAME 학과 DEPT 학년 YEAR 전화 S_TEL 주소 S_ADDRESS 지도교수 ADVISOR 생년월일 S_BIRTH 9911001 9912002 9911003 9813009 9811015 : 정찬우 김정길 강재우 이수자 이길녀 컴퓨터공학과 정보과학과 컴퓨터공학과 정보통신학과 컴퓨터공학과 2 2 2 3 3 023355519 03463355411 0325491115 0428601144 023386634 서울… 경기도… 인천… 대전… 서울… 0001 0015 0002 0022 0003 19800505 19801215 19801119 19791205 19791130 강의(LECTURE) 강좌번호 C_NO 교수번호 P_NO 요일 DAY_WEEK 시간 TIME 강의실 ROOM_NO 0001 0001 0002 0002 : 0001 0002 0005 0005 mon tue wed thu 1 5 1 1 T447 T448 T337 T337 등록(ENROLLMENT) 강좌번호 C_NO 학번 S_NO 성적 GRADE 0001 0001 0002 0002 : 9911001 9912002 9813009 9811015 A B A C

  4. 강좌(COURSE) 강좌번호 C_NO 강좌이름 C_NAME 시수 TIMES 학점 POINT 필수/선택 R/O 0001 0002 0003 0004 : 정보사회와 컴퓨터 데이터베이스 네트워크 C언어 3 3 3 3 3 3 3 3 R R R O 강의(LECTURE) 강좌번호 C_NO 교수번호 P_NO 요일 DAY_WEEK 시간 TIME 강의실 ROOM_NO 0001 0001 0002 0002 : 0001 0002 0005 0005 mon tue wed thu 1 5 1 1 T447 T448 T337 T337 +++ 5.3 데이터 조작어 3.1.12 한정된 이름을 이용한 검색 2개의 릴레이션내에 동일한 이름의 속성이 존재할 경우 한정자표기법을 사용해서 구분한다. 예) 강좌릴레이션과 강의 릴레이션에 강좌(c_no) 속성존재  course.c_no  lecture.c_no 로 구분한다.

  5. 강좌(COURSE) 강좌번호 C_NO 강좌이름 C_NAME 시수 TIMES 학점 POINT 필수/선택 R/O 0001 0002 0003 0004 : 정보사회와 컴퓨터 데이터베이스 네트워크 C언어 3 3 3 3 3 3 3 3 R R R O 강의(LECTURE) 강좌번호 C_NO 교수번호 P_NO 요일 DAY_WEEK 시간 TIME 강의실 ROOM_NO 0001 0001 0002 0002 : 0001 0002 0005 0005 mon tue wed thu 1 5 1 1 T447 T448 T337 T337 +++ 5.3 데이터 조작어 3.1.12 한정된 이름을 이용한 검색 예제 40. 강의릴레이션에서 개설된 강좌의 강좌번호, 강좌이름, 교수번호를 검색하라. Select c_no, c_name, p_no from course, lecture where course.c_no, lecture.c_no;

  6. +++ 5.3 데이터 조작어 3.1.13 릴레이션 별칭을 이용한 검색 • 한정자 표기법 사용시 릴레이션의 전체 이름 사용 대신에 별칭을 사용하면 이름을 짧게 사용할 수 있다. • 별칭은 from 절에서 릴레이션 명 뒤에 별칭을 정의함. 예) select * from STUDENT s, LECTURE l;

  7. 교수(PROFESSOR) 교수번호 P_NO 이름 P_NAME 직급 GRADE 연구실 ROOM_NO 전화 P_TEL 주소 P_ADDRESS 생년월일 P_BIRTH 입사일 JOIN_DATE 호봉 PAY_STEP 0001 0002 0003 : 김수철 이기문 박동진 교 수 교 수 부교수 T102 T103 T302 4444 4445 4555 서울… 서울… 서울… 19520401 19540605 19610105 00880301 00890901 00910301 4444 4445 4555 강의(LECTURE) 강좌번호 C_NO 교수번호 P_NO 요일 DAY_WEEK 시간 TIME 강의실 ROOM_NO 0001 0001 0002 0002 : 0001 0002 0005 0005 mon tue wed thu 1 5 1 1 T447 T448 T337 T337 +++ 5.3 데이터 조작어 3.1.13 릴레이션 별칭을 이용한 검색 예제 42. 강의릴레이션에서 0001 강좌를 강의하는 교수들의 교수번호와 이름을 검색하라. Select p_no, p_name from lecture l, professor p where c_no=‘0001’ and l.p_no = p.p_no;

  8. 5.3 데이터 조작어 3.1.14 부속질의를 이용한 검색 • 부속질의란 • 외부 질의의 WHERE절에 다시 SELECT ... FROM ... WHERE 형태로 포함된 SELECT문 • 부속질의는 상위질의보다 먼저 실행되어야 하므로 항상 괄호안에 위치해야 함. • Order by 절 사용할 수 없음

  9. 5.3 데이터 조작어

  10. +++ 5.3 데이터 조작어 3.1.14 부속질의를 이용한 검색 • 부속질의 예제 : 학번이 ‘991101’인 학생이 속한 학과의 학과장 교수번호, 조교이름, 전화번호를 검색하라. • 내부질의(부속질의) 블록 ― 학번이 0001인 학생의 학과명을 추출한다. • 외부질의(메인질의) 블록 ― 부속질의에서 구해진 학생이 소속된 학과의 학과장 교수번호, 조교이름, 전화번호를 추출한다. Select chief, assistant, dept_tel from department where dept_name = ( select dept from student where s_no=‘0001’);

  11. +++ 5.3 데이터 조작어 3.1.14 부속질의를 이용한 검색 • 부속질의 탐색조건 • IN : 한 애트리뷰트가 값들의 집합에 속하는가를 테스트할 때 사용됨 • EXISTS : 부속질의에서 나온 결과가 하나 이상 존재하면 참이 되는 조건이다. • ANY : 한 애트리뷰트가 값들의 집합에 속하는 하나 이상의 값들과 어떤 관계를 갖는가를 테스트하는 경우에 사용 • ALL : 한 애트리뷰트가 값들의 집합에 속하는 모든 값들과 어떤 관계를 갖는가를 테스트하는 경우에 사용

  12. +++ 5.3 데이터 조작어 1. 부속질의 집합원소 검사(In)- 검사값을 부속질의가 생성한 데이터 값들과 비교하여, 그들 중 하나와 일치하면 참(TRUE) 결과를 반환- IN 키워드는 =(eqaul)의 뜻과 같은 의미와 비슷함. - 구문 형식SELECT … FROM … WHERE 연산식 [NOT] IN (부속질의)

  13. 학과(DEPARTMENT) 학과코드 DEPT_NO 학과명 DEPT_NAME 학과명 DEPT_NAME 학과장 CHIEF 조교 ASSISTANT 전화 DEPT_TEL 위치 LOCATION 001 002 003 : 컴퓨터공학과 정보과학과 정보통신학과 0001 0015 0022 이지은 김영미 박순애 3333 3334 3335 T101 T201 T301 학생(STUDENT) 학번 S_NO 이름 S_NAME 학과 DEPT 학년 YEAR 전화 S_TEL 주소 S_ADDRESS 지도교수 ADVISOR 생년월일 S_BIRTH 9911001 9912002 9911003 9813009 9811015 : 정찬우 김정길 강재우 이수자 이길녀 컴퓨터공학과 정보과학과 컴퓨터공학과 정보통신학과 컴퓨터공학과 2 2 2 3 3 023355519 03463355411 0325491115 0428601144 023386634 서울… 경기도… 인천… 대전… 서울… 0001 0015 0002 0022 0003 19800505 19801215 19801119 19791205 19791130 +++ 5.3 데이터 조작어 3.1.14 부속질의를 이용한 검색 1. 부속질의 집합원소 검사 (IN)- 예제 44. 학번이 9911001인 학생이 소속된 학과의 학과장 교수번호, 조교이름, 학과전화번호를 검색하라. Select chief, assistant, dept_tel from department where dept_name in(Select * from student where s_no=‘9911001’);

  14. +++ 5.3 데이터 조작어 • 2. 존재 검사(EXISTS)- exists 다음에 나오는 검색문의 실행결과로 검색된 투플이 존재하는가를 검사한다.- 즉, exists(select * from)검색문을 실행한 뒤에 그 결과가 공집합이 아니면 참이 되고, 공집합이면 거짓이 된다.- 구문 형식SELECT … FROM … WHERE [NOT] EXISTS (부속질의)

  15. 0004 9913045 등록(ENROLLMENT) 강좌번호 C_NO 학번 S_NO 성적 GRADE 0001 0001 0002 0002 : 9911001 9912002 9813009 9811015 A B A C 9913045 신미영 정보통신학과 학생(STUDENT) 학번 S_NO 이름 S_NAME 학과 DEPT 학년 YEAR 전화 S_TEL 주소 S_ADDRESS 지도교수 ADVISOR 생년월일 S_BIRTH 9911001 9912002 9911003 9813009 9811015 : 정찬우 김정길 강재우 이수자 이길녀 컴퓨터공학과 정보과학과 컴퓨터공학과 정보통신학과 컴퓨터공학과 2 2 2 3 3 023355519 03463355411 0325491115 0428601144 023386634 서울… 경기도… 인천… 대전… 서울… 0001 0015 0002 0022 0003 19800505 19801215 19801119 19791205 19791130 +++ 5.3 데이터 조작어 3.1.14 부속질의를 이용한 검색 2. 존재 검사 (EXITS)- 예제 48. 0004 강좌를 등록한 학생의 이름과 학과를 검색하라. Select s_name, dept from student Where exits ( select s_no from enrollment where c_no = ‘0004’ands_no = student.s_no);

  16. 교수(PROFESSOR) 교수번호 P_NO 이름 P_NAME 직급 GRADE 연구실 ROOM_NO 전화 P_TEL 주소 P_ADDRESS 생년월일 P_BIRTH 입사일 JOIN_DATE 호봉 PAY_STEP 0001 0002 0003 : 김수철 이기문 박동진 교 수 교 수 부교수 T102 T103 T302 4444 4445 4555 서울… 서울… 서울… 19520401 19540605 19610105 00880301 00890901 00910301 4444 4445 4555 강의(LECTURE) 강좌번호 C_NO 교수번호 P_NO 요일 DAY_WEEK 시간 TIME 강의실 ROOM_NO 0001 0001 0002 0002 : 0001 0002 0005 0005 mon tue wed thu 1 5 1 1 T447 T448 T337 T337 +++ 5.3 데이터 조작어 3.1.14 부속질의를 이용한 검색 <문제> 자신이 담당하는 강좌 중에서 강의시간수가 1시간인 강좌가 있는 교수들의 이름, 직급, 전화번호를 검색하시오.(EXITS 키워드 사용) SELECT p_name, grade, p_tel FROM professorWHERE EXISTS ( SELECT p_no FROM lecture WHERE times = 1 and professor.p_no = p_no )

  17. +++ 5.3 데이터 조작어 3. 한정(quantified) 비교 검사(ANY 와 ALL) • ANY: 한 애트리뷰트가 값들의 집합에 속하는 하나 이상의 값들과 어떤 관계를 갖는가를 테스트하는 경우에 사용 • ALL : 한 애트리뷰트가 값들의 집합에 속하는 모든 값들과 어떤 관계를 갖는가를 테스트하는 경우에 사용 • 구문형식SELECT… FROM … WHERE 검사값 관계연산자{ANY | ALL } (부속-질의)

  18. 5.3 데이터 조작어

  19. 구 분 의 미 결 합 (union) - 두 개의 질의를 하나의 복합 질의로 결합 - 두 질의에서 행을 선택하여 중복된 행을 제거 - 중복된 행까지 결과를 얻기 위해서는 union all 이용 교집합 (intersection) 두 개의 릴레이션의 공통되는 행들을 포함하는 테이블 생성 합집합 (difference) 첫 번째 릴레이션에는 있지만 두 번째 집합에는 없는 행들을 포함하는 테이블 생성. 5.3 데이터 조작어 3.1.15 집합연산을 이용한 검색 표준 집합 연산 ( 예, 결합, 교집합, 차집합 등 ) 을 이용하여 데이터베이스의 데이터를 처리할 수 있다.

  20. 교수번호 p_no 0005 0008 0009 0010 0011 0013 0015 0016 0017 0018 0019 5.3 데이터 조작어 예제 50 union 명령을 이용한 검색 예제 데이터베이스에서 조교수이거나 0004 강좌를 강의하는 교수의 교수번호를 검색하라. select p_no from professor where grade='조교수' union select p_no from lecture where c_no='0004'; 결 과 :

  21. 5.3 데이터 조작어 이때 values 다음의 값들이 릴레이션의 열들과 개수가 일치하면 into 뒤의 열이름 리스트 생략가능함. • 3.2 데이터삽입 (INSERT문) • - 릴레이션에 투플을 삽입하는 문임. • 방법 2가지 • 릴레이션에 한 번에 한 투플씩 삽입하는 방법 • 부속질의를 이용하여 한 번에 여러 개의 투플들을 삽입하는 방법 Insert into테이블[(열_이름_리스트)] Values (‘값들’…) insert into테이블[(열_이름_리스트)] select문;

  22. 5.3 데이터 조작어- insert • 한 투플씩 삽입 예제 51 <그림 5-4> 예제 데이터베이스에서 학과(DEPARTMENT)릴레이션에 다음과 같은 투플 값을 삽입하는 SQL 질의어를 작성하라. (학과코드 : 001, 학과명 : '컴퓨터공학과', 학과장 : 0001, 조교 : '이지은', 전화 : 3333, 위치 : 'T101') insert into department(dept_no, dept_name, chief, assistant, dept_tel, location) values(001, '컴퓨터공학과', 0001, '이지은', 3333, 'T101'); 또는 insert into department values( 001, '컴퓨터공학과', 0001, '이지은', 3333, 'T101');

  23. 5.3 데이터 조작어- insert • 부속질의를 이용한 삽입 예제 53 예제 데이터베이스의 등록(ENROLLMENT)릴레이션에서 0002 강좌를 수강한 학생의 학번, 성적, 점수를 검색하여 데이터베이스(DATABASE)릴레이션에 삽입하는 SQL 질의어를 작성하라. 단, 데이터베이스(DATABASE)릴레이션은 (s_no, grade, merits)로 구성된다고 가정한다. insert into database(s_no, grade, merits) select s_no, grade, merits from enrollment where c_no='0002'; 또는 insert into database select s_no, grade, merits from enrollment where c_no='0002';

  24. 5.3 데이터 조작어- delete • DELETE문 • 한 릴레이션으로부터 한 개 이상의 투플들을 삭제함 • - DELETE문의 구문 • DELETE • FROM 릴레이션 • WHERE조건; • 삭제방법 3가지 • 전체 투플삭제 • 조건 지정 삭제 • 부속질의 이용 삭제

  25. 5.3 데이터 조작어 • 전체 투플 삭제 (where 절 없이 사용하면 전체투플 삭제됨) 예제 54 <그림 5-4> 예제 데이터베이스의 등록(ENROLLMENT)릴레이션에 포함된 모든 투플을 삭제하라. delete from enrollment; • 조건 지정 투플 삭제 예제 55 <그림 5-4> 예제 데이터베이스의 등록(ENROLLMENT)릴레이션에서 학번이 9717005인 투플을 삭제하라. delete from enrollment where s_no='9717005';

  26. 5.3 데이터 조작어 • 부속질의 이용 투플 삭제 예제 56 <그림 5-4> 예제 데이터베이스에서 컴퓨터공학과 학생 중 등록(ENROLLMENT) 릴레이션의 점수가 60점 미만인 학생의 투플을 삭제하라. delete from enrollment where merits < 60 and s_no in (select s_no from student where dept='컴퓨터공학과');

  27. 5.3 데이터 조작어- UPDATE문 • UPDATE문 • 한 릴레이션에 들어 있는 투플들의 애트리뷰트 값들을 수정 • UPDATE문의 구문 UPDATE릴레이션 SET애트리뷰트 = 값 또는 식[, …] WHERE조건; • 갱신방법 4가지 • 전체투플 변경 • 조건 지정하여 하나의 레코드 변경 • 조건 지정하여 복수의 레코드 변경 (컴퓨터과의 과목학점을 1점씩 증가시켜라) • 부속질의문을 이용한 변경

  28. 5.3 데이터 조작어 • 전체 투플 변경 예제 57 <그림 5-4> 예제 데이터베이스에서 강의(LECTURE)릴레이션에 포함된 모든 투플들의 시작시간을 1교시로 변경하라. update lecture set start_time = 1; • 조건 지정 투플 변경 (하나의 투플만 변경) 예제 58 <그림 5-4> 예제 데이터베이스의 교수(PROFESSOR)릴레이션에서 교수번호가 0011인 교수의 전화번호를 4207로 변경하라. update professor set p_tel = 4207 where p_no = '0011';

  29. 5.3 데이터 조작어 • 조건 지정 투플 변경 (복수의 투플 변경) 예제 59 예제 데이터베이스의 교수(PROFESSOR)릴레이션에서 직급이 조교수인 교수들의 호봉(pay_step)을 1호봉씩 증가시켜라. update professor set pay_step = pay_step + 1 where grade = '조교수'; • 부속질의 이용한 투플 변경 예제 61 예제 데이터베이스에서 0001 강좌를 수강하는 정보통신공학과 학생들의 점수를 5점씩 증가시켜라. update enrollment set merits = merits + 5 where c_no = '0001' and s_no in (select s_no from student where dept = '정보통신공학과');

  30. 6장 삽입SQL • 내포된 SQL(embedded SQL) • SQL이 삽입되는 언어를 호스트언어(C, 자바, 포트란 등등)라고 함. • 호스트 언어에 포함되는 SQL문을 내포된 SQL이라 부름 • 주로 데이터조작 연산쪽을 많이 사용한다. • C, C++, 코볼, 자바 등의 언어로 작성하는 프로그램에 SQL문을 삽입하여, 데이터베이스를 접근하는 부분을 SQL이 맡고 SQL에 없는 기능은 호스트 언어로 작성하는 것이 필요 • 삽입 SQL 컴파일 과정 • 삽입 SQL 문장을 먼저 전컴파일러(precompiler)가 컴파일을 해서 목적코드로 만든다.  즉, 내포된 SQL문을 해당 호스트언어의 컴파일러에서 허용되는 함수 호출로 변환함  호스트언어의 컴파일러에 의해서 전체 프로그램이 컴파일된다.

  31. 6장 삽입SQL … ESQLC SQL select s_no, s_name from student where dept=‘컴퓨터공학과’; .. . 삽입 SQL 질의어 부분 Precompiler … Call SQL 문장 함수 ... 호스트 언어의 대당 함수로 번역 호스트 언어 Compiler 오브젝트 모듈

  32. 6장 삽입SQL • 내포된 SQL 특징 • MS SQL SERVER 2000에서 C 언어에 SQL문을 ESQL/C라 부름 • 호스트 언어로 작성 중인 프로그램에 포함된 SELECT, INSERT, DELETE, UPDATE 등 모든 SQL문에는 반드시 문장의 앞부분에 EXEC SQL을 붙임 • 다른 호스트언어의 명령문과 쉽게 구별할 수 있게 한다. • 삽입 SQL문은 호스트변수 즉, 호스트 프로그램 변수를 포함할 수 있다. SQL문 속에서 이 호스트 변수는 SQL 필드명과 구별하기 위해 콜론(:)을 앞에 붙인다. 이 호스트변수는 또한 검색(SELECT, FETCH)결과를 저장하는 장소를 나타내기 위해 INTO 절에 나타날 수 있다. • 호스트변수는 사용하기 전에 반드시 삽입 SQL 선언부인 BEGIN/END DECLARE SECTION속에 선언되어야 한다. • 호스트변수의 데이터형식은 이에 대응하는 데이터베이스 속성의 SQL 타입과 일치해야 함. • 호스트변수와 릴레이션 속성명은 같아도 된다.

  33. 6장 삽입 SQL • 삽입 SQL 사용형식 예제-1 (호스트 언어 : C라고 가정함) <예제 > 학생 릴레이션에서 학번이 991101인 학생의 데이터를 검색하라. #include <stdio.h> main() { … exec sql select * from student WHERE sno = ‘991101’; }

  34. 6장 삽입 SQL • 삽입 SQL 사용형식 예제-2 (호스트변수 사용예제) <예제 > 학생 릴레이션에서 컴퓨터공학과에 재학중인 학생수를 검색하여 호스트변수인 nbrOfSt에 저장한 후 출력하시오. #include <stdio.h> main() { exec sql begin declare section; int nbrOfSt; exec sql end declare section; … DB 연결부분 생략 exec sql select count(*) into :nbrOfSt from student dept = ‘컴퓨터공학과’; printf(“컴퓨터공학과 학생수는 ? “ , nbrOfSt); } 호스트변수 선언형식 호스트변수 선언형식 삽입 sql 구문에서 호스트변수 사용시 변수명앞에 콜론(:) 사용해야 함.

  35. 6장 삽입 SQL • 커서 • 2개 이상의 투플들을 검색하는 SQL문에 대해서는 반드시 커서를 선언하고 사용해야 함 • 여러 투플들을 처리하는 데 사용되는 일종의 포인터로서 각 투플을 한번에 하나씩 지시할 수 있다. • 커서 사용단계 • DECLARE CURSOR문을 사용하여 커서를 정의함 • OPEN cursor문은 커서를 개방하여 질의를 수행한다. • FETCH~INTO문은 현재 커서가 가리키는 투플의 애트리뷰트 값들을 FETCH문에 명시된 호스트 변수들에 복사함 • CLOSE cursor는 커서를 닫음

  36. 6장 삽입 SQL <예제>소속학과를 호스트변수로 입력받아 그 값과 동일한 학과에 재직중인 교수의 교수번호, 이름, 직급을 검색하기 위한 커서를 선언하라. (단, 커서명은 prof_cur로 정의함. 호스트변수는 dept_no, p_no, p_name, grade로 이미 정의되어 있다고 가정함) exec sql declare prof_cur cursor for select p_no, p_name, grade from professor where dept_no = :dept_no; exec sql open prof_cur; exec sql fetch prof_cur into :p_no, :p_name, :grade; exec sql close prof_cur; 커서선언 커서개방 검색한 투플값 호스트변수에 할당함. 커서종료

  37. 6장 삽입 SQL • 오류처리기법 • Sqlstate 이용하는 방법 (X/OPEN SQL 표준 지원) • SQLCA(SQL Communications Area)를 이용하는 방법

  38. 6장 삽입 SQL 1. sqlstate 이용 방식 • 삽입 sql 문이 실행된 후에는 실행결과의 상태를 sqlstate 라는 변수를 통해 프포그램에 전달함. • 실행상태 : 성공(00000), 실패(02000), 오류중 하나임. • Sqlstate 변수를 이용하여 오류처리시 사용되는 문장이 whenever 임. • 사용형식 • Exec sql whenever 조건 적용연산; • 예) 오류발생시 실행을 중지하라. Exec sql whenever sqlerror stop;

  39. 6장 삽입 SQL • SQL 통신 영역(SQLCA: SQL Communications Area) • 내장 SQL문 수행 결과를 저장하기 위한 구조체임 • SQLCODE 변수 : 내장 SQL문의 실행결과(에러코드)가 정수값으로 저장된다. 아래는 SQLCODE의 값에 대해서 설명한다. • 0  마지막에 내포된 SQL문이 성공적으로 끝났음을 의미 • >0  SQL 문이 실행 되었지만 예외사항이 발생했음. NO -DATA-FOUND 등 양성적인 ERROR • <0  SQL 문이 에러발생으로 실행되지 않았음. • Sqlca 문은 프로그램의 시작부분에 정의함. • Sqlca문의 이용형식 • Exec sql include sqlca;

  40. 6장 삽입 SQL

More Related