■ PL/SQL이란?

Procedural Language/SQL의 약자로 SQL만으로는 구현이 어렵거나 구현 불가능한 작업을 수행하기 위해 오라클에서 제공하는 절차적인 프로그래밍 언어. 

변수 · 조건 처리 · 반복 처리 등 다른 프로그래밍 언어에서 제공하는 다양한 기능을 사용할 수 있다.

 

데이터 트랜잭션 처리 능력이나 정보보호, 데이터에 대한 보안, 예외처리 기능, 객체 지향 등 데이터 베이스와 관련된 중요한 기능을 지원하는 데이터베이스 업무를 처리하기에 최적화된 언어이다.

 

 PL/SQL 사용하는 이유

  1.  대용량 데이터를 연산해야 할 때, WAS등의 서버로 전송해서 처리하려면 네트워크에 부하가 많이 걸릴 수 있다. 이때 프로시저나 함수를 사용하여 데이터를 연산 가공한 수, 최종 결과만 서버에 전송하면 부담을 덜 수 있다.
  2.  로직을 수정하기 위해 서버를 셧다운 시키지 않아도 된다. 서버에서는 단순히 DB에 프로시저를 호출하여 사용하면 된다.
  3.  쿼리문을 직접 노출하지 않는 만큼 SQL Injection의 위험성이 줄어든다.
  4.  블록 단위로 유연하게 사용할 수 있다.

 

 단점

  1.  유지보수가 힘들다.
  2. 대용량 처리가 많을 경우, DB에 부하를 줄 수 있다.
  3. Git과 같은 형상관리를 사용할 수 없다.

■ PL/SQL의 기본 형식

1
2
3
4
5
6
7
DECLARE 블록
    [실행에 필요한 여러 요소 선언];
BEGIN
    [작업을 위해 실제 실행하는 명령어];
EXCEPTION
    [PL/SQL수행 도중 발생하는 오류 처리];
END;
cs

 

블록 : PL/SQL의 기본단위. 선언부 · 실행부 · 예외 처리부로 구성

 

구성 키워드 필수/선택 설명
DECLARE (선언부) 선택 실행에 사용될 변수 · 상수 · 커서 등을 선언
BEGIN (실행부) 필수 조건문 · 반복문 · SELECT · DML · 함수 등을 정의
EXCEPTION (예외 처리부) 선택 PL/SQL 실행 도중 발생하는 예외 상황을 해결하는 문장 서술

 

■ PL/SQL 작성 주의사항

  1. PL/SQL 블록을 구성하는 DECLARE, BEGIN, EXCEPTION 키워드에는 세미콜론(;)을 사용하지 않는다.
  2. PL/SQL 블록의 각 부분에서 실행해야 하는 문장 끝에는 세미콜론(;)을 사용
  3. SQL에서와 마찬가지로 PL/SQL 내부에서도 주석 사용 가능(-- 주석내용 , /* 주석내용 */)
  4. PL/SQL문 작성을 마치고 실행하기 위해 마지막에 슬래시(/)를 사용 (SQLDeveloper에서는 생략 가능)

 

■ PL/SQL에서 간단한 문장 출력

1
2
3
4
5
6
--문장 출력
SET SERVEROUTPUT ON        -- 실행결과를 화면에 출력하기 위한 것
BEGIN
    DBMS_OUTPUT.PUT_LINE('HELLO, PL/SQL!');
END;
/    -- 실행하기 위해 사용 (SQLDeveloper에서는 생략 가능)
cs

 

SQLPlus에서 PL/SQL 실행결과를 화면에 출력하려면 SERVEROUTPUT 환경변수 값을 ON으로 해야한다.

SQLPlus의 접속 계정이 변경되거나 접속이 끊어진 후 다시 접속했다면 SERVEROUTPUT을 다시 ON해줘야 결과를 확인할 수 있다.

PUT_LINE은 화면 출력을 할 때 사용한다. DEMS_OUTPUT패키지 안에 있다.

 


■ 변수

변수는 데이터를 일시적으로 저장하는 요소이다.

선언부(DECLARE)에서 작성하며 작성한 변수는 실행부(BEGIN)에서 활용한다.

 

1
[변수 이름] [자료형] := [값 OR 값을 도출하는 표현식]
cs

 

 
1
2
3
4
5
6
7
8
9
DECLARE     -- 선언부
    V_EMPNO NUMBER(4) := 7788;    -- 변수 V_EMPNO에 7788할당. NUMBER(4)이므로 4자리 숫자
    V_ENAME VARCHAR(10);        -- 변수 V_ENAME을 VARCHAR(10)자료형으로 선언. 값은 지정하지 X
BEGIN         -- 실행부
    V_ENAME := 'SCOTT';            -- 변수 V_ENAME에 SCOTT을 저장
    DBMS_OUTPUT.PUT_LINE('V_EMPNO : ' || V_EMPNO);        -- 변수 V_EMPNO 출력    
    DBMS_OUTPUT.PUT_LINE('V_ENAME : ' || V_ENAME);        -- 변수 V_ENAME 출력    
END;        -- 현재 블록 종료
/            -- 작성한 PL/SQL문을 실행(SQLDeveloper에서는 생략 가능)
cs

 

간단하게변수를 선언하고 값을 대입한 뒤 출력하는 예시이다.

문자를 연결할 때는 || 연산자를 사용한다.

 

 

■ 상수

1
[변수 이름] CONSTANT [자료형] := [값 OR 값을 도출하는 표현식]
cs

 

■ 기본값

1
[변수 이름] [자료형] DEFAULT [값 OR 값을 도출하는 표현식]
cs

+ Recent posts