예외 처리부 실행부 로직 처리 중 에러 또는 비정상적인 상황을 처리하기 위한 작업을 기술하는 부분.
PL/SQL의 종류
PROCEDURE : 프로시저 처리 후 반환. 값의 제한이 없음
FUNCTION : 함수 처리 후 반환. 하나의 값 반환
PACKAGE : 프로시저나 함수의 그룹
TRIGGER : 조건에 맞는 이벤트가 일어나면 후속 이벤트가 발생
변수
변수명 [모드] 데이터 타입
매개변수, 자체변수
IS 로 구분됨
IS 다음의 자체 변수는 mode 생략
매개변수는 역할에 따라
IN : 프로시저가 호출될 때 전달되는 값을 처리하기 위한 변수
OUT : 프로시저가 처리된 후 반환되는 값을 처리하기 위한 변수
INOUT : 두가지 기능을 갖는 변수
변수 타입
스칼라(scalar) 타입
NUMBER, CHAR, VARCHAR2, DATE, BOOLEAN 등
참조(reference) 타입
%TYPE
%ROWTYPE
선택처리문 (IF ~ ENDIF)
declare - 선언부 v_condition number := 2; begin IF v_condition < 1 then dbms_output.put_line(‘대한’); ELSIF v_condition = 1 then dbms_output.put_line(‘민국’); ELSE dbms_output.put_line(‘만세’); END IF; end;
select * from user_constraints where 테이블 명 = '테이블 명';
제약 조건의 삭제
DROP CONSTRAINT 제약조건 명
ALTER Table 테이블 명 drop constraint 제약조건 명
제약 조건의 활성화, 비활성화
Alter Table 테이블 명
Disalbe / Enable CONSTAINT 제약조건 명;
뷰 (VIEW)
외부단계
가상 테이블
질의 변형
장점
데이터베이스를 재구성하여 논리적 데이터 독립성 제공
원하는 데이터 만을 조작함으로 데이터의 보완기능 강화
VIEW의 생성과 삭제
생성
Create View 뷰 이름
AS 부질의
삭제
Drop View 부 이름
VIEW의 종류
단순 뷰
단순 뷰는 단일 베이스 테이블로 부터 유도된 뷰이다.
Create or replace view v_student1
as select * from student where sty_dept='컴퓨터정보';
조인 뷰
조인뷰는 2개 이상의 베이스 테이블로부터 유도된 뷰이다.
Create or replace view v_enrol1
as select sub_name, a.sub_no, stu_no, enr_grade
from enrol a, subject b
where a.sub_no = b.sub_no;
인라인 뷰
인라인 뷰는 From절에 SELECT 문으로 정의된 뷰이다.
select stu_no, stu_name, a.stu_dept, stu_height
from student a, (select stu_dept, avg(stu_height) as avg_height
from student
group by stu_dept) b
where a.stu_dept = b.stu_dept
and a.stu_hegiht > b.avg_height;
TOP-N 뷰
최댓값 또는 최솟값을 가진 열에 몇 개의 레코드만 추출할 때 사용되는 기능
Select stu_no, stu_name, stu_height
from (select stu_no, stu_name, stu_height
from student
where stu_height is not null
order by stu_height desc)
where rownum <= 5;
인덱스 (INDEX) 빠른 검색을 위하여 정의되며, 한 개 이상의 열로 구성됨. 학생 테이블의 학번은 기본 키이므로 자동으로 인덱스 정의. 이름으로 검색하는 질의가 많을 경우 이름으로 인덱스를 정의. 학과로 검색하는 경우가 극히 적다면 학과를 인덱스로 정의할 경우 활용도가 떨어지며, 기억공간은 낭비된다. 데이터 사전의 USER_INDEXS, USER_ID_COLUMS
학생의 이름으로 인덱스 생성 - Create INDEX i_stu_name on student(stu_name);
학생의 학번과 이름을 합쳐서 인덱스를 생성 - Create INDEX i_stu_no on student(stu_no, stu_name);
유일한 값으로 인덱스 생성 - Create UNIQUE INDEX i_stu_name on student(stu_name);
함수나 수식을 이용하여 인덱스 생성 - Create INDEX i_stu_weight on student(stu_weight-5);