본문 바로가기
09.학교시험

3학년 1학기 데이터베이스 시스템 중간

by chojju 2021. 12. 5.
반응형

1. 데이터베이스 시스템

데이터(Data)

컴퓨터 시스템에 의해 처리되는 대상과 처리된 결과

내부적인 표현과 외부적인 표현 문제

정보

데이터를 처리해서 사람이 이해하기에 적합한 형태로 의미 있게 만든 것

 

File Processing System

File 개념 등장 -> 많은 양의 데이터 처리 필요

보조기억장치에 저장

논리적 개념 필요

일반적으로 같은 구조(Type)의 레코드 집합

프로그램이 직접 입출력

File 처리 시스템이란

프로그램과 이것이 필요로 하는 데이터 file이 항상 1:1로 대응

File 처리 시스템의 문제점(구조적, 데이터 종속)

자료의 중복: 비일관성

새로운 기능 추가 어려움

데이터의 고립성: 여러 파일, 다른 형식, PL

무결성 문제

데이터 종속성(프로그램 종속성X)

프로그램과 데이터가 서로 영향을 미침

 

DB System

Integrated(통합->중복된 데이터를 제거)

Shared(공유)

User maintained database의 문제점

      복잡한 작업

      파일 구조가 너무 복잡

      프로그래밍이 어려워짐

DBMS의 등장

     프로그래머의 부담 경감

     응용 프로그램과 데이터를 완전 분리

     편리하고 효율적인 환경 제공

DB system의 구성 요소

데이터(DB) + h/w + DBMS + 응용 프로그램 + 사용자

 

장 데이터공유 - 중복제거, 데이터의 일관성, 보안

단 시스템의 크기, 복잡성, 비용 증가, 회복의 복잡성

   Higher impact on a failure

 

데이터베이스: 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 모임

특징

데이터베이스는 조직체의 모든 구성원이 공유하는 자원이다.

모든 데이터가 중복을 최소화하면서 통합된다.

데이터에 관한 설명까지 포함한다. 이를 데이터베이스 스키마 또는 메타데이터(데이터에 관한 데이터)라고 한다.

데이터의 구조가 프로그램과 분리되어 데이터베이스에 저장되므로 프로그램과 데이터 간의 독립성이 제공된다.

데이터베이스는 효율적으로 접근이 가능하고 질의를 할 수 있다.

 

데이터베이스 관리 시스템(DBMS)

데이터베이스를 정의하고, 질의어를 지원, 리포트를 생성하는 등의 작업을 수행하는 소프트웨어

1.1데이터베이스 시스템 개요

1.1.1 데이터베이스 스키마와 상태

데이터베이스 스키마

전체적인 데이터 베이스 구조

자주변경되지 않는다.

가능한상태를 미리 정의.

내포라 불린다.

데이터베이스 상태

특정 시점의 데이터베이스의 내용 의미

시간이 지남에 따라 계속 바뀜

외연이라 불린다.

 

1.1.2    데이터베이스 시스템의 구성요소

Database

사용자(응용프로그램)

DBMS

Hardware

1.1.3    데이터베이스 시스템의 요구사항

데이터 독립성: 응용 프로그램이 데이터 표현의 상세한 내역과 데이터 저장으로부터 독립적

융통성: 기존의 응용 프로그램들에 영향을 주지 않으면서 DB구조를 변경할 수 있어야한다.

효율적인 데이터 접근(인덱스 구조): DB를 효율적으로 접근, 저장위해 기법 제공.

데이터에 대한 동시 접근: 각 사용자가 혼자서 DB에 접근하는 것처럼 인식하도록 동시접근 동기화 위한 동시성 제어 제공

백업과 회복: 시스템 에러로부터 DB를 회복하며, 손상입는경우 대비해 백업 수행

중복 줄이거나 제어해 일관성 유지: 데이터를 통합함으로써 동일한 데이터가 여러 개의 사본으로 존재하는 것을 피함, 성능을 향상시키기 위해 중복 일부 허용, 제어

데이터 무결성: 데이터가 정확하고 완전함 의미.

데이터 보안: 권한이 없는 접근으로부터 DB를 보호한다.

쉬운 질의어: 질의어를 통해 질의를 표현하고 결과를 바로 얻을 수 있다. 효율적인 질의 최적화와 수행이 중요

다양한 사용자 인터페이스 제공

1.2        파일 시스템 vs DBMS

1.2.1 파일 시스템을 사용한 기존의 데이터 관리

1.2.2    파일 시스템 단점

데이터가 많은 파일에 중복저장

사용자들을 위한 동시성 제어가 제공되지 않는다.

검색하려는 데이터를 명시하는 질의어 제공X

보안조치 미흡

회복 기능 없다.

프로그램-데이터 독립성X 유지보수 비용 큼

데이터 모델링 개념이 부족

무결성 유지 어려움

프로그래머의 생산성이 낮음.

데이터 공유 부족.

융통성 부족

 

1.2.3    DBMS를 사용한 데이터베이스 관리

여러 사용자와 응용 프로그램들이 DB 를 공유

사용자의 질의를 빠르게 수행할 수 있는 인덱스 등의 접근 경로를 DBMS가 자동적으로 선택하여 수행

권한 없는 사용자로부터 DB보호

여러 사용자에 적합한 다양한 인터페이스 제공

데이터간 복잡한 관계표현, 무결성 제약조건을 DBMS가 자동적으로 유지

시스템 고장시 DB를 고장 전의 일관된 상태로 회복

프로그램에 영향을 주지 않으면서 DB구조를 변경할 수 있음(프로그램 데이터 독립성)

1.2.4    DBMS의 장점

중복성과 불일치 감소.

시스템 개발, 유지비용 감소.

표준화 시행하기 용이

보안 향상

무결성 향상

조직체의 요구사항 식별가능

다양한 유형의 고장으로부터 DB회복 가능

DB의 공유와 동시접근 가능

 

1.3 DBMS 발전 과정

1.3.1 데이터 모델

DB 구조를 기술하는데 사용되는 개념들의 집학적인 구조(데이터 타입과 관계), 이 구조 위에서 동장하는 연산자들, 무결성 제약조건들

사용자에게 내부 저장 방식의 세세한 사항은 숨기면서 데이터에 대한 직관적인 뷰를 제공하는 동시에 이들간의 사상 제공

1.4 DBMS 언어

데이터 정의어(DDL: Data Definition Language)

사용자는 DDL을 사용하여 데이터베이스 스키마 정의

데이터 정의어로 명시된 문장이 입력되면 DBMS는 사용자가 정의한 스키마에 대한 명세를 시스템 카탈로그 또는 데이터 사전에 저장

Create(생성), Alter(변경), Drop(삭제)

데이터조작어(DML: Data Manipulation Language)

사용자는 DML을 사용하여 DB내의 원하는 데이터를 검색, 수정, 삽입, 삭제

절차적 언어 및 비절차적 언어로 나뉨

관계 DBMS에서 사용되는 SQL은 대표적인 비절차적 언어

대부분의 DML SUM, COUNT, AVG와 같은 내장 함수들을 갖고 있음

데이터 조작어는 단말기에서 대화식으로 입력되어 수행되거나 C, 코볼등의 고급 프로그래밍 언어로 작성된 프로그램에 내포되어 사용됨

SELECT(검색),UPDATE(수정),DELETE(삭제), INSERT(삽입)

 

데이터 제어어(DCL:Data Control Languate)

사용자는 DCL을 사용하여 DB 트랜잭션을 명시하고 권한을 부여하거나 취소

1.6 ANSI/SPARC 아키텍쳐와 데이터 독립성

 

사상(mapping): 두개의 집합에 연결시킬 때

DBMS 세가지 유형의 스키마 간 사상 책임짐

외부/개념 사상

외부 단계의 뷰를 사용해서 입력된 사용자의 질의를 개념 단계의 스키마를 사용한 질의로 변환

개념/내부 사상

이를 다시 내부 단계의 스키마로 변환하여 디스크의 DB를 접근

1.6.2 데이터 독립성

논리적 데이터 독립성

개념 스키마의 변화로부터 외부 스키마가 영향을 받지 않음을 의미

물리적 데이터 독립성

내부 스키마의 변화가 개념 스키마에 영향을 미치지 않으며, 외부 스키마에도 영향을 미치지 않음.

Ex)파일 저장 구조 변경, 인덱스 생성 및 삭제

2. 관계 데이터 모델과 제약조건

2.1        관계 데이터 모델의 개념

관계 데이터 모델

동일한 구조(릴레이션)의 관점에서 모든 데이터를 논리적으로 구성

선언적인 질의어를 통한 데이터 접근을 제공

응용 프로그램들은 DB 내의 레코드들의 어떠한 순서와도 무관하게 작성됨

사용자는 원하는 데이터(what)만 명시하고 어떻게 이 데이터를 찾을 것인가(how)는 명시할 필요가 없음

2.2        릴레이션의 키

Relation Key

tuple을 고유하게 식별할 수 있는 하나 이상의 attribute들의 모임

Superkey, candidate key, primary key, alternate key, foreign key

Super key

relation 내의 특정 tuple을 고유하게 식별하는 하나의 attribute 또는 attribute 들의 집합

Tuple들을 고유하게 식별하는데 꼭 필요하지 않은 attribute들을 포함 할 수 있음

Candidate key

tuple을 고유하게 식별하는 최소한의 attribute들의 모임

모든 relation에는 최소한 한 개 이상의 candidate key 가 있음

후보 키도 두 개 이상의 attribute로 이루어질 수 있으며 이런 경우에 composite key 라고 부름

Primary key

relation candidate key가 두 개 이상 있으면 설계자 또는 DB관리자가 이들 중에서 하나의 primary key로 선정함

자연스러운 primary key를 찾을 수 없는 경우 record번호와 같이 종종 인위적인 키 attribute relation에 추가할 수 있음

Alternate key

Primary key가 아닌 candidate key

Foreign key

어떤 relation primary key를 참조하는 attribute

관계 데이터베이스에서 relation들 간의 관계를 나타내기 위해 사용됨

Foreign key attribute는 참조되는 relation primary 키와 동일한 domain을 가져야 함

자신이 속한 relation primary key의 구성요소가 되거나 되지 않을 수 있음

 

외래 키 유형

다른 relation primary key를 참조하는 foreign key

 

자체 relation primary key를 참조하는 foreign key

 

Primary key의 구성요소가 되는 foreign key

 

2.3        무결성 제약조건

데이터 무결성

데이터의 정확성 또는 유효성 의미

일관된 DB 상태를 정의하는 규칙들을 묵시적 또는 명시적으로 정의

DB가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사하므로 응용 프로그램들은 일관성 조건을 검사할 필요 없음

32.4.1 도메인 제약조건

attribute 값이 반드시 원자값이어야 함

Attribute 값의 디폴트 값, 가능한 값들의 범위 지정 가능

데이터 형식을 통해 값들의 유형 제한, check 제약 조건 통해 값들의 범위 제한 가능

2.3.2    기본키와 엔티티무결성 제약조건

개체 무결성 – not null on p.k(주키는 값이 반드시 존재해야 한다)

2.3.3    외래키와 참조 무결성 제약조건

 참조 무결성: 참조 튜플이 반드시 존재(테이블 연결 보장)

2.4.5 무결성 제약조건의 유지

(1)삭제

참조하는 릴레이션에서 투플이 삭제되면 모든 제약 조건을 위배하지 않음

참조 되는 릴레이션에서 투플이 삭제되면 참조 무결성 제약조건을 위배하는 경우가 생기거나 생기지 않을 수 있음

참조 무결성 제약 조건을 만족시키기 위해 DBMS가 제공하는 옵션

                   제한(restricted)

위배를 야기한 연산을 단순히 거절

연쇄(cascade)

참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들도 함께 삭제

널값(nullify)

참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들의 외래키에 널 값을 삽입

디폴트값

널값을 넣는 대신 디폴트 값을 넣는다는 것을 제외하고 위 옵션과 비슷

(2)수정

DBMS는 수정하는 애트리뷰트가 기본 키인지 외래 키인지 검사

수정하려는 애트리뷰트가 기본키도 아니고 외래키도 아니면 수정 연산이 참조 무결성 제약 조건을 위해하지 않음

제한, 연쇄, , 디폴트값 규칙이 수정연산에도 적용

오라클에선 수정 연산에 대해 제한적으로 참조 무결성 제약조건을 유지

3. 관계 대수와 SQL

관계데이터 모델에서 지원되는 2가지 정형적 언어

관계 해석(relational calculus)

원하는 데이터만 명시하고 질의를 어떻게 수행할 것인가는 명시하지 않는 선언적 언어

관계 대수(relational algebra)

어떻게 질의를 수행할 것인가를 명시하는 절차적 언어

SQL의 이론적인 기초

4.1 관계 대수

기존의 Relation들로부터 새로운 Relation을 생성

관계 대수의 완전성

Selection, projection, , , 카티션 곱은 관계 대수의 필수적인 연산자

다른 관계 연산자들은 필수적인 관계 연산자를 두 개 이상 조합하여 표현할 수 있음.

임의의 질의어가 적어도 필수적인 관계대수 연산자들만큼의 표현력을 갖고 있으면 관계적으로 완전(relationally complete) 하다고 말함

조인 연산자

두 개의 relation으로부터 연관된 tuple들을 결합하는 연산자

세타 조인, 동등 조인, 자연 조인, 외부 조인, 세미 조인

 

4.2 SQL 개요

SQL 개요

SQL은 비절차적 언어(선언적 언어)이므로 사용자는 자신이 원하는 바(what)만 명시하며, 원하는 것을 처리하는 방법(how)은 명시 불가

관계 DBMS는 사용자가 입력한 SQL문 번역, 사용자가 요구한 데이터 찾는데 필요한 모든 과정 담당.

자연어에 가까운 구문을 사용하여 질의 표현 가능.

두가지 인터페이스

        대화식 SQL(interactive SQL)

        내포된 SQL(embedded SQL)

 

 

4.3 데이터의 정의어와 무결성 제약조건

 

데이터 정의어(DDL)

스키마의 생성과 제어

SQL2 에서는 동일한 DB 응용에 속하는 relation, domain, 제약조건, view, 권한 등을 그룹화 하기 위해 스키마 개념 지원

Relation 정의

 

 

릴레이션 제거

DROP TABLE 테이블명;

ALTER TABLE

ALTER TABLE 테이블명 ADD 요소 자료형;

인덱스 생성

CREATE INDEX 테이블명 ON 테이블명(요소);

제약 조건

 

CREATE TABLE EMPLOYEE(

ID NUMBER,

NAME CHAR(10),

SALARY NUMBER,

MANAGER_SALARY NUMBER,

CHECK(MANAGER_SALARY> SALARY));

참조 무결성 제약조건 유지

ON DELETE NO ACTION

ON DELETE CASCADE

ON DELETE SET NULL

ON DELETE SET DEFAULT

ON UPDATE NO ACTION

무결성 제약조건의 추가 및 삭제

ALTER TABLE STUDENT ADD CONSTRAINT STUDENT_PK PRIMARY KEY(STNO);

ALTER TABLE STUDENT DROP CONSTRAINT STUDENT_PK;

 

4.4 SELECT

SELECT

관계 데이터 베이스에서 정보를 검색하는 SQL

관계 대수의 셀력션과 의미 다름

관계 대수의 셀렉션, 프로젝션, 조인, 카티션 곱 등을 결합한 것

관계 데이터베이스에서 가장 자주 사용됨

여러 가지 질의들의 결과를 보이기 위해 관계 데이터베이스 상태 사용

 

기본적인 SQL 질의

SELECT절과 FROM절만 필수, 나머지 선택 사항

 

릴레이션의 모든 attribute나 일부 attribute검색

 

널 값

널값을 포함한 다른 값과 널값을 +, - 등을 사용하여 연산하면 결과는 널.

COUNT(*)를 제외한 집단 함수들은 널값 무시.

어떤 ATTRIBUTE에 들어 있는 값이 널인가 비교하게 위해서 DNO = NULL 이렇게 하면 안됨

WHERE DNO IS NULL; à 이렇게 사용

ORDER BY

사용자가 select문에서 질의 결과 순서 명시Xàrelation tuple들이 삽입된 순서대로 사용자에게 제시됨

ORDER BY절에서 하나 이상의 attribute를 사용해 검색 결과 정렬 가능

select문에서 가장 마지막에 사용

디폴트는 ASC

DESC à 내림차순

널값은 ASC시 가장 마지막 DESC시 가장 앞

 

집단 함수

DB에서 검색된 여러 tuple들의 집단에 적용되는 함수

relation의 한 개의 attribute에 적용되어 단일 값 반환.

select절과 having절에만 나타날 수 있음

count(*)를 제외하고는 널값을 제거한 후 남아 있는 값들에 대해 집단 함수 값을 구함

count(*)는 결과 relation의 모든 행들의 총 개수를 구하는 반면 count(attribute)는 해당 attribute에서 널값이 아닌 값들의 개수 구함

키워드 distinct가 집단 함수 앞에 사용되면 집단 함수가 적용되기 전에 먼저 중복 제거

 

 

그룹화

Group by절에 사용된 attribute에 동일한 값을 갖는 tuple들이 각각 하나의 그룹으로 묶임

attribute를 그룹화(grouping) attribute라고 함

각 그룹에 대하여 결과 relation에 하나의 tuple이 생성됨

Select절에는 각 그룹마다 하나의 값을 갖는 attribute, 집단 함수, 그룹화에 사용된 attribute들만 나타날 수 있음.

Select empno, avg(salary) from employee; à 그룹화 하지 않은 채 employee relation의 모든 tuple에 대해서 사원번호와 모든 사원들의 평균 급여를 검색하므로 잘못됨.

 

 

Having

어떤 조건을 만족하는 그룹들에 대해서만 집단 함수 적용 가능

각 그룹마다 하나의 값을 갖는 attribute를 사용해 각 그룹이 만족해야하는 조건 명시함

그룹화 attribute에 같은 값을 갖는 tuple들의 그룹에 대한 조건을 나타내고, 이 조건을 만족하는 그룹들만 질의 결과에 나타남.

having절에 나타나는 attribute는 반드시 group by절에 나타나거나 집단 함수에 포함 되어야 함

 

JOIN

두 개 이상의 relation으로부터 연관된 tuple들을 결합

일반적인 형식은 from절에 두 개 이상의 relation들이 열거되고, relation에 속하는 attribute들을 비교하는 join 조건이 where절에 포함됨

Join 조건은 두 relation 사이에 속하는 attribute 값들을 비교 연산자로 연결한 것

가장 흔히 사용되는 비교 연산자는 =

 

조인 조건 생략 or join 조건을 틀리게 표현했을 때 카티션 곱이 생성

Join 질의가 수행되는 과정을 개념적으로 보면 먼저 join조건을 만족하는 tuple들을 찾고, tuple들로부터 select절에 명시된 attribute들만 project하고 필요하다면 중복을 배제하는 순서로 진행됨

 

중첩 질의(nested query)

외부 질의의 where절에 다시 select … from … where형태로 포함된 select

부질의(subquery)라고 함

INSERT, DELETE, UPDATE문에도 사용 가능.

중첩 질의의 결과로 한 개의 스칼라값(단일 값), 한 개의 attribute로 이루어진 relation, 여러 attribute로 이루어진 relation이 반환될 수 있음.

 

한 개의 스칼라값이 반환되는 경우

 

attribute로 이루어진 relation이 반환되는 경우

중첩 질의의 결과로 하나의 attribute로 이루어진 다수의 tuple들이 반환될 수 있음.

외부 질의의 where절 에서 IN, ANY(SOME), ALL, EXIST와 같은 연산자를 사용해야 함

IN: attribute가 값들의 집합에 속하는 가를 테스트 할 때 사용됨.

 

ANY: attribute가 값들의 집합에 속하는 하나 이상의 값들과 어떤 관계를 갖는가를 테스트하는경우 사용

 

ALL: attribute가 값들의 집합에 속하는 모든 값들과 어떤 관계를 갖는가를 테스트하는 경우 사용

 

여러 attribute로 이루어진 relation이 반환되는 경우

EXISTS 연산자를 사용하여 중첩 질의의 결과가 빈 relation 인지 여부를 검사함.

중첩 질의의 결과가 빈 relation이 아니면 참.

 

 

 

 

상관 중첩 질의(correlated nested query)

중첩 질의의 where절에 있는 predicate에서 외부 질의에 선언된 relation의 일부 attribute를 참조하는 질의

중첩 질의의 수행 결과가 단일 값이든, 하나 이상의 attribute로 이루어진 relation이든 외부 질의로 한 번만 결과를 반환하면 상관 중첩 질의가 아님.

상관 중첩 질의에서는 외부 질의를 만족하는 각 tuple이 구해진 후에 중첩 질의가 수행되므로 상관 중첩 질의는 외부 질의를 만족하는 tuple 수만큼 여러 번 수행될 수 있음

 

 

 

4.5 INSERT, DELETE, UPDATE

INSERT

 

DELETE

 

UPDATE

 

4.6 트리거와 주장

트리거

명시된 이벤트(DB의 갱신)가 발생할 때마다 DBMS가 자동적으로 수행하는, 사용자가 정의하는 문(PROCEDURE)

DB의 무결성을 유지하기 위한 일반적 도구

테이블 정의시 표현할 수 없는 기업의 비즈니스 규칙들을 시행하는 역할

트리거를 명시하려면 트리거를 활성화시키는 사건인 이벤트, 트리거가 활성화 되었을 때 수행되는 테스트인 조건, 트리거가 활성화되고 조건이 참일때 수행되는 문(프로시저)동작을 표현해야 함.

트리거를 이벤트-조건-동장(ECA) 규칙이라고 부름

EVENT, CONDITION, ACTION

 

 

형식

 

이벤트의 가능한 예로 테이블에 tuple 삽입, 삭제, 수정

조건은 임의의 형태의 predicate

동작은 DB에 대한 임의의 갱신

어떤 이벤트가 발생했을 때 조건이 참이면 트리거와 연관된 동작이 수행, 반대 시 동작 수행안함

삽입, 삭제, 수정 등이 일어나기 전에 동작하는 트리거와 일어난 후에 동작하는 트리거로 구분.

 

연쇄적으로 활성화되는 트리거

하나의 트리거가 활성화되어 이 트리거 내의 한 SQL문이 수행되고, 그 결과로 다른 트리거를 활성화하여 그 트리거 내의 SQL문이 수행될 수 있음

 

주장

SQL3에 포함되어 있으나 대부분의 상용 관계 DBMS가 아직 지원하고 있지 않음

트리거는 제약조건을 위반했을 때 수행할 동작을 명시하는 것이고, 주장은 제약조건을 위반하는 연산이 수행되지 않도록 함

주장의 구문

CREATE ASSERTION 이름 CHECK 조건;

트리거보다 좀더 일반적인 무결성 제약조건

DBMS는 주장의 predicate를 검사하여 만일 참이면 주장을 위배하지 않는 경우이므로 데이터베이스 수정이 허용됨

일반적으로 두 개 이상의 테이블에 영향을 미치는 제약조건을 명시하기 위해 사용됨

 

4.7 내포된 SQL

내포된 SQL(embedded SQL)

호스트 언어에 포함되는 SQL문을 내포된 SQL이라 부름

데이터 구조가 불일치하는 문제(impedance mismatch 문제)

오라클에서 C 언어에 SQL문을 내포 시키는 환경을 Pro*C라 부름

일반적으로 내포된 SQL문이 포함된 소스 파일의 확장자는 .pc

이 파일을 Pro*C를 통하여 전컴파일(precompiler)하면 확장자가 .c C 소스 프로그램이 생성됨

호스트 언어로 작성 중인 프로그램에 SQL문을 내포시킬 때 해당 호스트 언어의 컴파일러가 어떻게 호스트 언어의 문과 SQL문을 구별할 것인가?

호스트 언어로 작성 중인 프로그램에 포함된 SELECT, INSERT, DELETE, UPDATE 등 모든 SQL문에는 반드시 문장의 앞부분에 EXEC SQL을 붙임

Pro*C 전컴파일러는 내포된 SQL문을 C 컴파일러에서 허용되는 함수 호출로 변환함

 

Pro*C

윈도우7 환경에서 Pro*C를 실습하려면 비주얼 스튜디오 6.0 등의 통합 개발 환경이 필요

정적인 SQL문은 C 프로그램에 내포된 완전한 Transact-SQL

정적인 SQL문은 입력값과 출력 데이터를 위해서 C 프로그램의 변수들을 포함할 수 있음

동적인 SQL문은 응용을 개발할 때 완전한 SQL문의 구조를 미리 알고 있지 않아도 됨

동적인 SQL문은 불완전한 Transact-SQL문으로서 일부 또는 전부를 질의가 수행될 때 입력 가능

SQL문에 포함된 C 프로그램의 변수를 호스트 변수(host variable)라고 부름

 

불일치 문제와 커서

호스트 언어는 단일 변수/레코드 위주의 처리(tuple 위주의 방식)를 지원하는 반면에 SQL은 데이터 레코드들의 처리(집합 위주의 방식)를 지원하기 때문에 불일치 문제가 발생함

불일치 문제를 해결하기 위해서 커서(cursor)가 사용됨

두 개 이상의 tuple들을 검색하는 SQL문에 대해서는 반드시 커서를 선언하고 사용해야 함

커서는 한 번에 한 tuple씩 가져오는 수단

불일치 문제와 커서

DECLARE CURSOR문을 사용하여 커서를 정의함

OPEN cursor문은 질의를 수행하고, 질의 수행 결과의 첫 번째 tuple 이전을 커서가 가리키도록 한다. 이 것이 커서의 현재 tuple

그 다음에 FETCH문은 커서를 다음 tuple로 이동하고, tupleattribute 값들을 FETCH문에 명시된 호스트 변수들에 복사함

CLOSE cursor는 커서를 닫음

 

루프 내의 FETCH

EXEC SQL WHENEVER NOT FOUND GOTO ...

                     for (;;)

EXEC SQL WHENEVER NOT FOUND GOTO ...

                     for (;;)

결과 집합이 비었거나 더 이상의 가져올 tuple이 없으면 FETCH문은 ‘no data found’ 에러를 발생시킴

WHENEVER의 구문

EXEC SQL WHENEVER <조건> <동작>;

조건에는 WHERE절을 만족하는 tuple이 없는 경우를 나타내는 NOT FOUND, 에러가 발생한 경우인 SQLERROR

동작에는 프로그램의 다음 문장을 수행하는 CONTINUE, 특정 레이블로 이동하는 GOTO, 루프를 빠져나오는 DO BREAK

SQL 통신 영역(SQLCA)

C 프로그램에 내포된 SQL문에 발생하는 에러들을 사용자에게 알려줌

사용자는 SQLCA 데이터 구조(SQLCH.H)의 에러 필드와 상태 표시자를 검사하여 내포된 SQL문이 성공적으로 수행되었는가 또는 비정상적으로 수행 되었는가를 파악할 수 있음

SQLCA 데이터 구조 중에서 가장 중요하고 널리 사용되는 필드는 SQLCODE 변수

SQLCODE의 값이 0이면 마지막에 내포된 SQL문이 성공적으로 끝났음을 의미

SQLCA를 사용하기 위해서는 아래와 같은 문장을 포함해야 함

EXEC SQL INCLUDE SQLCA.H; OR #include <sqlca.h>

오라클 통신 영역(ORACA)

SQLCA라는 SQL 표준을 오라클에서 확장한 구조체

sqlca에서 얻을 수 있는 정보 외에 추가로 필요한 정보를 호스트 프로그램에게 제공하기 위한 구조체

반응형

댓글