PL/SQL ?
Procedural Language/Structured Query Language์ ์ฝ์๋ก, Oracle Database์์ ์ฌ์ฉํ๋ ์ ์ฐจ์ ์ธ์ด์ด๋ค.
PL/SQL์ SQL ๋ฌธ์ฅ์ ์ฌ์ฉํ๋ฉด์๋ ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ, ์์ธ ์ฒ๋ฆฌ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
PL/SQL์ ํน์ง
- ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ: SQL์ด ์ฃผ๋ก ์ ์ธ์ ์ธ์ด๋ผ๋ฉด, PL/SQL์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ฐจ์ ๋ ผ๋ฆฌ๋ฅผ ๊ตฌํํ๊ฑฐ๋, ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ธ๋ก ๊ตฌ์กฐ: PL/SQL์ ๋ธ๋ก(block) ๊ตฌ์กฐ๋ก ๋์ด ์์ต๋๋ค. ๊ฐ ๋ธ๋ก์ ์ต๋ช ๋ธ๋ก ๋๋ ์ ์ฅ ํ๋ก์์ ์ฒ๋ผ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋ ์ ์์ต๋๋ค.
- SQL๊ณผ์ ํตํฉ: PL/SQL์ ๊ธฐ๋ณธ์ ์ผ๋ก SQL๊ณผ ํตํฉ๋์ด ์์ด, SQL ๋ฌธ์ ํฌํจํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ ์ ์์ต๋๋ค. PL/SQL ๋ด์์ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ์ ์ฅํ๊ฑฐ๋ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์์ธ ์ฒ๋ฆฌ: PL/SQL์ **์์ธ ์ฒ๋ฆฌ(Exception Handling)**๋ฅผ ์ง์ํฉ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง์ ์ ์ํ ์ ์์ด, ์์ ์ ์ธ ํ๋ก๊ทธ๋จ ์ด์์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฐ๋ ฅํ ์ฑ๋ฅ: PL/SQL์ ์๋ฒ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ์ ๋คํธ์ํฌ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์ด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ์ฌ๋ฌ SQL ๋ฌธ์ฅ์ ํ๋์ ๋ธ๋ก์ผ๋ก ๋ฌถ์ด์ ์๋ฒ์์ ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
PL/SQL์ ๊ตฌ์กฐ
PL/SQL ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ ๊ฐ์ง ์น์ ์ผ๋ก ๋๋ฉ๋๋ค:
- ์ ์ธ๋ถ(Declare): ๋ณ์, ์์, ์ปค์, ์ฌ์ฉ์ ์ ์ ์์ธ ๋ฑ์ ์ ์ธํ๋ ๋ถ๋ถ์ ๋๋ค.
- ์คํ๋ถ(Begin): ์ค์ ๋ก ์คํํ ๋ช ๋ น๋ฌธ์ ์์ฑํ๋ ๋ถ๋ถ์ ๋๋ค. SQL ๋ฌธ, ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
- ์์ธ ์ฒ๋ฆฌ๋ถ(Exception): ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ๊ทธ์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ ๋ก์ง์ ์ ์ํ๋ ๋ถ๋ถ์ ๋๋ค.
DECLARE
v_salary NUMBER(10, 2); -- ๋ณ์ ์ ์ธ
BEGIN
-- SQL ๋ฌธ ์คํ ๋ฐ ๋ณ์์ ๊ฐ ์ ์ฅ
SELECT salary INTO v_salary
FROM employees
WHERE employee_id = 100;
-- ์กฐ๊ฑด๋ฌธ ์ฌ์ฉ
IF v_salary > 5000 THEN
DBMS_OUTPUT.PUT_LINE('High salary');
ELSE
DBMS_OUTPUT.PUT_LINE('Normal salary');
END IF;
EXCEPTION
-- ์์ธ ์ฒ๋ฆฌ
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with the given ID');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An unexpected error occurred');
END;
- DECLARE ๋ถ๋ถ์ ๋ณ์ v_salary๋ฅผ ์ ์ธํฉ๋๋ค.
- BEGIN ๋ถ๋ถ์ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ , ์กฐ๊ฑด๋ฌธ์ ํตํด ํน์ ์กฐ๊ฑด์ ๊ฒ์ฌํ ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- EXCEPTION ๋ถ๋ถ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ง ๋ชปํ์ ๋ NO_DATA_FOUND ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
PL/SQL์ ์ฃผ์ ๊ธฐ๋ฅ
- ์ ์ฅ ํ๋ก์์ ๋ฐ ํจ์(Stored Procedure & Function):
- ํ๋ก์์ ์ ํจ์๋ PL/SQL์์ ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค. ์์ฃผ ์ฌ์ฉํ๋ ์์ ์ ํ๋ก์์ ๋ ํจ์๋ก ์ ์ํด ๋๊ณ ํ์ํ ๋ ํธ์ถํ ์ ์์ต๋๋ค.
- ํธ๋ฆฌ๊ฑฐ(Trigger):
- ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์๋์ผ๋ก ์คํ๋๋ PL/SQL ๋ธ๋ก์ ๋๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ ์ฝ์ , ์์ , ์ญ์ ์ ์คํ๋ฉ๋๋ค.
- ํจํค์ง(Package):
- PL/SQL ํจํค์ง๋ ๊ด๋ จ๋ ํ๋ก์์ , ํจ์, ๋ณ์ ๋ฑ์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ฝ๋๋ฅผ ๋ชจ๋ํํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- ์ปค์(Cursor):
- PL/SQL์์ ์ปค์๋ ์ฌ๋ฌ ํ์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก SELECT ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์์ธ ์ฒ๋ฆฌ(Exception Handling):
- PL/SQL์ ์์์น ๋ชปํ ์ํฉ์ ๋์ฒํ ์ ์๋๋ก ๊ฐ๋ ฅํ ์์ธ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ์ ํ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
CREATE OR REPLACE PROCEDURE update_salary (p_employee_id NUMBER, p_new_salary NUMBER) IS
BEGIN
UPDATE employees
SET salary = p_new_salary
WHERE employee_id = p_employee_id;
END;
PL/SQL์ ์ฅ์
- ์ฑ๋ฅ ํฅ์: ๋คํธ์ํฌ ์๋ณต์ ์ค์ด๊ธฐ ๋๋ฌธ์ SQL๋ง ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
- ์์ ์ฑ: ์์ธ ์ฒ๋ฆฌ์ ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ: ํ๋ก์์ , ํจ์, ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
'Database > oracle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
sql ์๋ฌ ํ์ธ (0) | 2024.11.21 |
---|