[DB] 4.7 내포된 SQL

Cherish·2023년 10월 24일
0

DataBase

목록 보기
7/7
post-thumbnail

🍏 내포된 SQL (Embedded SQL)

= 호스트 언어에 포함되는 SQL문

  • 다른 언어의 프로그램에 SQL을 삽입해서 DB를 접근할 수록 있도록 하는 것
  • impedance mismatch 문제
    데이터 구조가 불일치하는 문제

✅ Pro*C

  • 오라클에서 C 프로그램에 SQL문 내포시키는 방법
  • 확장자 : .pc
  • pc 파일을 Pro*C를 통하여 전컴파일하면 .c인 소스 프로그램이 생성됨

✅ 호스트 변수 (host variable)

  • SQL문에 포함된 C 프로그램 변수
  • 호스트 언어와 SQL문 사이 통신 담당
    • SQL문에 사용될 데이터 값을 입력하거나
    • SQL문 결과 출력
  • 호스트 변수를 SQL 문에서 사용할 때 콜론(:)을 붙인다.


✅ 정적인 SQL문

  • C 프로그램에 내포된 완전한 SQL문
  • C 프로그램 변수들 포함 가능

✅ 동적인 SQL문

  • SQL문(strcpy~)이 문자열 상수 -> 동적으로 변경 가능
  • 불완전한 SQL문으로서 질의가 수행될 때 입력 가능하다.
  • 개발할 때 완전한 SQL문 구조를 몰라도 된다.

  • PREPARE : 질의 수행 계획을 만들기
  • EXECUTE : 수행
    • 왜 단계를 두개로 분리? (prepare/execute)
      질의 최적화 과정에서 비용이 많이 들기 때문에 한 번 최적화를 하고 재활용하면 prepare없이 excute 가능하다. 만일 수행을 한번만 해도 된다면 단계 분리 안하고 묶어서 가능.



🍏 불일치 문제와 커서

  • 불일치 문제 = impedance mismatch
    = 호스트 언어와 SQL의 데이터 구조 불일치 문제
  • 해결 방법 = 커서(cursor)
  • 두 개 이상의 튜플을 검색하는 SQL문에 대해서 커서를 꼭 사용해야 한다.
  • 호스트 언어
    단일 변수 / 레코드 위주 처리 (튜플 위주)
  • SQL
    데이터 레코드들의 처리 (집합 위주)
    -> 불일치 문제 발생

✅ 커서 (Cursor)

= 한 번에 한 튜플씩 가져오는 방법
= 여러 튜플 읽어오고 싶을 때 : for문 안에 FETCH

  • DECLARE CURSOR : 커서 정의
  • OPEN : 질의 수행 / 첫 튜플 이전을 커서가 가리키도록 한다.
  • FETCH : 커서를 다음 튜플로 이동 / 튜플의 애트리뷰트 값들을 FETCH문에 명시된 호스트 변수들에 복사
  • CLOSE : 커서 닫기


✅ WHENEVER

= 자동적인 에러 검사 및 처리를 위한 구문


✅ SQL 통신 영역 (SQLCA)

= SQL Communications Area

  • C 프로그램에 내포된 SQL문에 발생하는 에러들을 사용자에게 알려준다.
  • sqlcode : 값이 0이면 마지막에 내포된 SQL문이 성공적으로 끝났다

✅ 오라클 통신 영역 (ORACA)

= Oracle Communications Area

  • SQLCA라는 SQL 표준을 오라클에서 확장한 구조체
  • SQLCA 이외에 추가로 필요한 정보를 호스트에 제공하기 위한 구조체

✅ 에러 메세지 : sqlglm ( )

  • 에러가 난 것을 미리 확인하고 사용
    = WHENEVER 사용 / SQLCODE 값이 0이 아닐때

✅ SQLSTATE 상태 변수

= 내포된 SQL의 에러처리를 위해 도입
이전에는 SQLCODE를 사용했는데, Oracle 전처리기 옵션을 수정하면 SQLSTATE을 사용할 수 있다.

CLASS CODE(2) + SUBCLASS CODE(3)

  • CLASS CODE
    • 2자리 문자
    • 예외의 유형 구분
  • SUBCLASS CODE
    • 3자리 문자
    • 구체적인 예외

✅ 지시 변수 (Indicator Variables)

  • NULL 값 여부 등 호스트 변수에 대한 추가적인 정보 제공
  • 2 byte 정수로 표현
  • 호스트 변수 바로 다음에 선택적으로 추가한다
    • 지시 변수도 앞에 콜론( : )을 붙인다
    • 호스트 변수와 지시 변수 사이에 선택적으로 INDICATOR 키워드 사용 가능















0개의 댓글

관련 채용 정보