PL / SQL ( Oracle's Procedural Language extension to SQL )


(뜻: SQL에 대한 Oracle의 절차적 언어 확장)

SQL문장에서 변수정의, 조건처리(IF), 반복처리(LOOP, WHILE, FOR) 등을 지원한다.

다른 프로그래밍 언어와 다른 점은 PL/SQL은 DB에 직접 탑재되어 컴파일되고 실행되어 성능 면에서

우수

하고, DB 관련 처리를 할 때 수많은 기능을 제공한다. 일반 프로그래밍 언어적인 요소를 거의 다 

가지고 있어서 실무에서 요구되는 절차적인 데이터 처리를 다 할 수 있음. 특히 SQL 과 연동되어서 

막강한 기능을 구현할 수 있다.

 

• PL/SQL은 SQL에 없는 기능이 제공한다.

  1. 변수 선언을 할 수 있다.
  2. 비교 처리를 할 수 있다.
  3. 반복 처리를 할 수 있다.

PL / SQL소스 프로그램의 기본 단위를 블록(BLOCK)이라고 하는데 블록은 ①선언부 ②실행부 ③예외처리부로 구성된다.

이 블록은 다시 이름이 없는 블록과 이름이 있는 블록으로 구분할 수 있는데

이름 없는 블록이 익명블록이며 이름 있는 블록이 함수, 프로시저, 패키지 등 속한다

 

 

 

 장점

프로그램의 모듈화

: 관리의 용이

특정 프로그램을 Procedure, function, package등의 프로그램으로 만들어 여러 응용 프로그램을 만들 시에 공통으로 이용 및 관리 할 수 있다

프로그램의 모듈화

: 네트워크 입출력 감소

PL/SQL문을 사용하게 되면 모든 SQL문 및 논리적 프로그램을 프로시저 등으로 작성하며 클라이언트는 네트워크 연결을 통한 SQL문 및 프로그램 언어를 보내는 것이 아니라 프로시저 등을 실행하는 구문만 데이터 베이스에 보낼 수 있어 네트워크 입출력을 줄일 수 있다

 

 

 

- PL/SQL 블록 내에서는 한 문장이 종료할 때마다 세미콜론(;)을 사용한다.

- END 뒤에 ;을 사용하여 하나의 블록이 끝났다는 것을 명시한다. 

- DELCLARE나 BEGIN이라는 키워드로 PL/SQL 블록이 시작하는 것을 알 수 있다.

- 단일 행 주석은 --이고 여러 행 주석 /* */이다. 

- PL/SQL 블록은 행에 /가 있으면 종료된다.

- 모든 문장의 종결 기호(세미콜론)를 명시해야 한다. 대입 연산자로는 :=을 사용한다. 대입 연산자는 변수의 선언 시 및 변수의 대입에 이용된다 SELECT문에 의해 추출되는 DATA는 INTO절의 변수에 저장해서 처리한다.

 

BEGIN
     DBMS_OUTPUT.PUT_LINE('Hello World!');
END;
/

PUT_LINE Oracle이 제공해주는 프로시저로 DBMS_OUTPUT 패키지에 묶여 있다.

 

 

 

변수

SLECT에서는 변수를 못씀 INTO를 이용하여 넣는다

SELECT s_name

INTO NAME

FROM subject

 

변수

구문 설명
identifier 변수의 이름
CONSTANT 변수의 값을 변경할 수 없도록 제약한다
datatype
- 변수 데이터 타입: SQL타입과 PL/SQL 타입
- PL/SQL 데이터 타입: BOOLEAN, BINARY_INTEGER
NOT NULL 값을 반드시 포함하도록 하기 위해 변수를 제약한다
Expression Literal, 다른 변수, 연산자나 함수를 포함하는 표현식

 

상수 선언

PL/SQL에서 변수를 선언할 때 사용되는 자료형은 SQL에서 사용하던 자료형과 거의 유사하다. 

숫자를 저장하려면 NUMBER를 사용하고 문자를 저장하려면 VARCHAR2를 사용해서 선언한다.

상수명 CONSTANT 데이터 타입 := 상수값;

 

변수의 값 대입

변수의 값을 지정하거나 재지정하기 위해 PL/SQL의 지정문자를 사용한다. 

대입(지정) 연산자(:=)는 좌측의 변수에 우측 값을 대입한다는 의미다.

-- 변수의 선언 및 할당을 하고 그 변수 값을 출력한다!
DECLARE
    VEMPLOYEE_ID NUMBER(6);
    VFIRST_NAME VARCHAR2(20);
BEGIN
    VEMPLOYEE_ID :=105;
    VFIRST_NAME := 'David';
    
     DBMS_OUTPUT.PUT_LINE('사번 / 이름');
     DBMS_OUTPUT.PUT_LINE('--------------');    
     DBMS_OUTPUT.PUT_LINE(VEMPLOYEE_ID || ' / ' || VFIRST_NAME);    
END;
/

 

 

 

스칼라 / 레퍼런스 변수

- PL/SQL에서 변수를 선언하기 위해 사용할 수 있는 데이터타입은 크게 스칼라와 래퍼런스로 나눈다.

 

① 스칼라

SQL에서의 자료형 지정과 거의 동일하다.

VEMPLOYEE_ID NUMBER(6);
VFIRST_NAME VARCHAR2(20);

 

② 레퍼런스 : %TYPE 속성과 %ROWTYPE 속성 사용한다.

%ROWTYPE은 로우 단위로 참조한다, 전체 레코드를 참조하기 위해서는 %ROWTYPE으로 선언하면 된다

사용 시 장점은 특정 테이블의 칼럼의 개수와 데이터 형식을 모르더라도 지정할 수 있다. SELECT 문장으로 로우를 검색할 때 유리하다.

DECLARE
   --레코드 변수 선언
   vemployees 
VEMPLOYEE_ID EMPLOYEES.EMPLOYEE_ID%TYPE;
VFIRST_NAME EMPLOYEES.FIRST_NAME%TYPE;

 

%TYPE 속성을 사용하여 선언한 VEMPLOYEE_ID 변수는 EMPLOYEES 테이블의 EMPLOYEE_ID칼럼의 자료형과 크기를 그대로 참조해서 정의한다.

%ROWTYPE은 로우 단위로 참조한다. 

VEMPLOYEES EMPLOYEES%ROWTYPE;

 

PL/SQL에서 SQL문장

PL/SQL의 SELECT 문은 INTO절이 필요한데, INTO절에는 데이터를 저장할 변수를 기술한다. 

SELECT 절에 있는 칼럼은 INTO절에 있는 변수와 1대1대응을 하기에 개수와 데이터의 형, 길이가 일

치하여야 한다. 

 

 

 

 

 

 

제어문

PL / SQL은 여러 가지 제어 구조를 이용하여 문장들의 논리적 흐름을 변경할 수 있다

조건에 의해 분기하는 선택문과 반복된 문장을 한번 기술하고도 여러 번 수행하도록 하는 반복문이 있다

 

IF ~ THEN ~ END IF

특정 조건을 만족하면 어떤 처리를 하고, 그렇지 않으면 아무 처리도 하지 않는다

IF 조건문 THEN
     조건처리;
END IF;

 

IF 조건문 THEN
     조건처리;
ELSE
     조건처리2
END IF;
IF 조건문1 THEN
     조건처리1;
ELSE IF 조건문2 THEN
     조건처리2;
ELSE
     조건처리n;
END IF;

 

'DB > SQL' 카테고리의 다른 글

집합 연산자  (0) 2022.04.10
PreparedStatement  (0) 2022.04.06
시퀀스  (0) 2022.04.03
VIEW  (0) 2022.04.03
Sub Query  (0) 2022.04.03