22/05/11 TIL - PL/SQL

김석진·2022년 5월 11일
0

Oracle SQL

목록 보기
9/10

PL/SQL

PL/SQL이란?

  • Oracle's Procedural Language extension to SQL의 약자
  • SQL문장에서 변수정의, 조건처리, 반복처리 등을 지원하며, 오라클 자체에 내장되어 있는 Procedure Language이다.
  • DECLARE 문을 이용하여 정의되며, 선언문의 사용은 선택사항이다.
  • PL/SQL문은 블록구조로 되어 있고 PL/SQL 자신이 컴파일 엔진을 가지고 있다.

PL/SQL BLOCK Structure

  • PL/SQL은 프로그램을 논리적인 블록으로 나누는 구조화된 블록언어
  • PL/SQL블록은 선언부(선택적),실행부(필수적),예외처리부(선택적)으로 구성되어 있고, BEGIN과 END키워드는 반드시 기술해 줘야한다.
  • PL/SQL블록에서 사용하는 변수는 블록에 대해 논리적으로 선언할 수 있고 사용할 수 있다.
DECLARE
Declarative Section(선언부)
BEGIN
Executable Section(실행부)
EXCEPTION
Exception Handling Section(예외처리부)
END;

Declaractive Section(선언부)

  • 변수 ,상수 , CURSOR,USER_DEFINE EXCEPTION을 선언 할 수 있다.
    Executable Section(실행부)
  • SQL 반복문, 조건문을 실행한다.
  • 실행부는 BEGIN으로 시작하고 END로 종료된다.
  • 실행문은 프로그램 내용이 들어가는 부분으로써 필수적으로 사용되어야함
    Exception Handling Section(예외처리)
  • 예외에 대한 처리
  • 일반적으로 오류를 정의하고 처리하는 부분으로 선택사항이다.
  • SQL*Plus환경에서는 DECLARE~ BEGIN 이라는 키워드로 PL/SQL 블럭이 시작함을 알 수 있다.

PL/SQL 프로그램의 작성요령

  • PL/SQL 블록내에서는 한문장이 종료할때마다 세미콜론을 사용
  • END뒤에 세미콜론을 사용하여 하나의 블록이 끝났음을 명시
  • SQL*PLUS 환경에서는 DECLARE~BEGIN이라는 키워드로 PL/SQL블럭이 시작함을 알 수 잇음

PL/SQL 블럭 유형

Anonymous Block(익명블록)

  • 이름이 없는 블록을 의미, 실행하기 위해 프로그램안에서 선언되고 실행시 실행을 위해 PL/SQL 엔지으로 전달됨
  • 선행 컴파일러 프로그램과 SQL*PLUS또는 서버 관리자에서 익명의 블록을 내장할 수 있다.

Procedure(프로시저)

  • 특정 작업을 수행할 수 있는 이름이 있는 PL/SQL 블록으로써, 매개변수를 받을 수 있고, 반복적으로 사용할 수 있다
  • 보통 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL 블록을 데이터베이스에 저장하기 위해 생성함

Function(함수)

  • 보통값을 계산하고 결과값을 반환하기 위해서 함수를 많이 사용
  • 대부분 구성이 프로시저와 유사,IN파라미터만 사용할 수 있음 반드시 반환될 값의 데이터 타입을 RETURN 문에 선언해야함
  • PL/SQL 블록내에서 RETURN문을 통해서 반드시 값을 반환해야함

프로시저(Procedure)란?

특정 작업을 수행하는, 이름이 있는 PL/SQL BLOCK임
매개변수를 받을 수 있고 반복적으로 사용할 수 있는 BLOCK이다.
보통 연속실행또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL Block을 데이터베이스에 저장하기 위해 생성

프로시저문법

CREATE OR REPLACE Procedure name
IN argument
OUT argument
INOUT argument

IS
	[변수 선언]
BEGIN	-- 필수적으로 들어있어야한다.
	[PL/SQL BLOCK]
    --- SQL문장, PL/SQL 제어문장
    [EXCEPTION] ---선택사항
    --error가 발생할때 EXCEPTION 처리를 수행하는 문장
    
END; ----필수

프로시저 작성 예제

  • 프로시저 이름: update_sal , update_sal은 사번을 입력받아 급여를 인상하는 프로시저이다.
  • 프로시저를 끝마칠때는 항상 "/"를 지정한다.
SQL> CREATE OR REPLACE PROCEDURE update_sal
		(v_empno  IN NUMBER)
IS
BEGIN
		UPDATE emp
        SET sal = sal *1.1
        WHERE empno = v_empno;
        COMMIT;
 END update_sal;
 /

함수(Function)란?

보통 값을 계산하고 결과 값을 반환하기 위해서 함수를 많이 사용
대부분 구성이 프로시저와 유사하고 그러나 IN파라미터만사용할 수 있다.
반드시 반환될 값의 데이터 타입을 RETURN 문에 선언해야함
또한 PL/SQL블록내에서 RETURN문을 통해서 반드시 값을 반환해야함

함수 문법

  • PL/SQL 블록에는 적어도 한개의 RETURN문이 있어야함
  • PL/SQL 블록은 함수가 수행할 내용을 정의한 몸체부분이다
CREATE OR REPLCATE FUNCTION 함수명
	[(argument..)]
 RETURN datatype ---datatype은 반환하는 값이 datatype이다.
IS 
	[변수 선언 부분]
BEGIN 
	[PL/SQL Block]
RETURN 변수;
END;

함수 작성예제

SQL> CREATE OR REPLACE FUNCTION FC_update_sal
			(v_empno IN NUMBER)
        RETURN NUMBER---리턴되는 변수의 데이터타입을 꼭 정의한다.
        IS
        v_sal emp.sal%type ----%type변수가 사용됨(스칼라 데이터타입)
        
        BEGIN
        UPDATE emp
        SET sal= sal * 1.1
        WHERE emp_no = v_empno;
        COMMIT;
        SELECT sal
        INTO v_sal
        FROM emp
        WHERE emp_no=v_empno;
        RETURN v_sal
        END;
/
       	
profile
주니어 개발자 되고싶어요

0개의 댓글