PL/SQL
PL/SQL
- Oracle's Procedural Language Extension to SQL
- 기존의 ANSI-SQL에 절차 지향 언어의 기능을 추가한 SQL
ANSI-SQL
- 비절차 지향 언어. 순서가 없고 연속적이지 않다.
- 문장 단위 구조
- ANSI-SQL + 절차적 기능(제어) = PL/SQL
PL/SQL 프로시저 블럭 구조
IS(AS) -- 선언부
BEGIN --실행부
EXCEPTION -- 예외처리부
END;
- Oracle's Proc은 4개의 키워드(블럭)으로 구성되어 있다.
- DECLARE, BEGIN, EXCEPTION, END
DECLARE
- 선언부
- 프로시저에서 사용할 변수, 객체 등을 선언하는 영역
- 생략 가능
BEGIN
- 실행부, 구현부
- BEGIN ~ END
- 구현된 코드를 가지는 영역(메소드 body 동일)
- 생략 불가능
- 핵심
- PL/SQL + ANSI-SQL 작성
EXCEPTION
- 예외처리부
- catch 역할
- 예외 처리 코드를 작성
- 생략 가능
END
- BEGIN 블럭의 종료 역할
- 생략 불가능
특징
- 순차 처리 지원 : 순차 처리를 지원하는 언어이기 때문에 IF, LOOP, FOR WHILE 과 같은 제어/ 반복문의 사용이 가능하다
- 예외 처리 지원 : 실행 중 정상적인 흐름에 위배되는 상황이 발생 시 예외 처리기가 동작한다.
- 패키지를 사용한 모듈화 지원 : 연관성을 가지는 타입, 상수, 변수, 커서, 프로그램들을 엮어 하나의 단위로 구성할 수 있다.
- 트리거 : 데이터 베이스에서 발생하는 이벤트를 처리한다. 자동 실행되어 PL/SQL을 호출한다.
- 객체 지향 프로그래밍 지원 : JAVA, C 등 과 같은 언어처럼 객체 타입을 제공한다.
주의사항
declare
vname varchar2(15);
buseo varchar2(15);
begin
-- vname := (select name from tblInsa where num = 1001);
-- select 컬럼 into 변수
select name into vname from tblInsa where num = 1001;
select buseo into buseo from tblInsa where num = 1001;
dbms_output.put_line(vname);
dbms_output.put_line(buseo);
- PL/SQL 블럭 안에서는 일반 SQL을 절대 작성할 수 없다 !
- 반드시 select into 절을 사용해야한다.
- ANSI-SQL의 결과값을 바로 사용 하지 못하며, PL/SQL으로 옮겨서 사용이 가능하다.