til/Oracle

PL/SQL

값진 2022. 5. 9. 23:50

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으로 옮겨서 사용이 가능하다.