PL/SQL

stoph·2023년 5월 1일
0

개요

오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 프로그래밍 언어

  • 쉽게 말하면, 일반 SQL 문법에 C나 C++ 같은 언어의
    절차적 문법 (변수 사용, if문, for문 등)이 추가된 형태이다.
  • SQL 문만으로 처리하기에 복잡한 자료의 저장이나 프로시저, 펑션, 트리거를 작성하는 데에 쓰인다.
  • Block 구조로 되어 있어 모듈화가 가능하다.

Block 종류

이름설명
익명블록이름이 없는 PS/SQL Block
프로시저
(Procedure)
반환 값이 없거나 하나 이상 가지는 PL/SQL
함수
(Function)
반환 값이 하나인 PL/SQL
패키지
(Package)
하나 이상의 프로시저, 함수, 변수, 예외 등의 묶음
패키지 스펙과 패키지 바디로 나누어짐
트리거
(Trigger)
지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL

Block 구조

이름설명필수여부
선언부
(DECLARE)
변수, 상수 커서 등을 정의하는 부분X
실행부
(BEGIN)
제어문, 반복문, 함수 등등 로직을 작성할 수 있는 부분O
예외처리부
(EXCEPTION)
실행부의 로직을 수행하는 도중 예외가 발생했을 때 이를 어떻게 처리할지 작성하는 부분X
종료
(END)
PL/SQL 문의 끝을 알리는 부분O

예시

익명 블록

DECLARE
	current_date DATE := SYSDATE;  -- 변수 선언 후 sysdate 할당
BEGIN
	dbms_output.put_line(current_date);  -- DBMS내에서 화면 출력
END;

프로시저 (Procedure)

CREATE OR REPLACE PROCEDURE my_procedure (
	p_name IN VARCHAR2(255),
    p_email IN VARCHAR2(255),
    result OUT VARCHAR2(50)
)
IS

-- 변수 선언 하는 부분

BEGIN
	INSERT INTO USER(name, email) VALUES (p_name, p_email);
    result := 'OK';
    
EXCEPTION
	WHEN OTHERS
    THEN
    	result := SQLEERM;
        ROLLBACK;
END;
/

함수

CREATE OR REPLACE FUNCTION my_function (
	param1 IN NUMBER,
    param2 IN NUMBER
)
RETURN NUMBER
IS
BEGIN
	RETURN param1 + param2;
END;

패키지

  • 패키지 스펙
CREATE OR REPLACE PACKAGE my_package
IS
	PROCEDURE my_procedure (
    	p_name IN VARCHAR2(255),
        p_email IN VARCHAR2(255),
        result OUT VARCHAR2(255)
    );
    
    FUNCTION my_function (
    	param1 IN NUMBER,
        param2 IN NUMBER,
    )
    RETURN NUMBER;
END;
  • 패키지 바디
CREATE OR REPLACE PACKAGE BODY my_package IS
	
    PROCEDURE my_procedure (
    	...
    )
    IS
    BEGIN
    	...
    END;
    
    FUNCTION my_function (
    	...
    )
    IS
	BEGIN
    	...
        RETURN ...;
    END;
END;

트리거

CREATE OR REPLACE TRIGGER my_trigger
	AFTER INSERT ON LIKED_POST
    FOR EACH ROW
BEGIN
	UPDATE POST SET liked = liked + 1 WHERE post.id = NEW.post_id;
END;

0개의 댓글