오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 프로그래밍 언어
이름 | 설명 |
---|---|
익명블록 | 이름이 없는 PS/SQL Block |
프로시저 (Procedure) | 반환 값이 없거나 하나 이상 가지는 PL/SQL |
함수 (Function) | 반환 값이 하나인 PL/SQL |
패키지 (Package) | 하나 이상의 프로시저, 함수, 변수, 예외 등의 묶음 패키지 스펙과 패키지 바디로 나누어짐 |
트리거 (Trigger) | 지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL |
이름 | 설명 | 필수여부 |
---|---|---|
선언부 (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;