[ ํ๋ก์์ ]
PL/SQL ์์ ์ฌ์ฉ๋๋ ํ๋ก๊ทธ๋จ ๋จ์์ด๋ค.
ํน์ ์์ ์ ์ํํ๋ ์ฝ๋ ๋ธ๋ก์ ์บก์ํ ํ ๊ฒ์ด๋ค.
๋์ผํ ์์ ์ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ ์ ์๋ค.
[ ์คํ ์ด๋ ํ๋ก์์ ( ์ ์ฅ ํ๋ก์์ ) ]
ํ๋์ ํจ์์ฒ๋ผ ์คํํ๊ธฐ ์ํ ์ฟผ๋ฆฌ์ ์งํฉ
์ผ๋ จ์ SQL ์ฒ๋ฆฌ ๊ณผ์ ์ ์งํฉ์ฒ๋ผ ๋ฌถ์ด์ ์ฌ์ฉํ๋ ๊ตฌ์กฐ
CREATE OR REPLACE PROCEDURE NEW_JOB_PROC --๋งค๊ฐ๋ณ์
IS --๋ณ์์ ์ ์ธ ์์ญ
BEGIN --์คํ ์์ญ
DBMS_OUTPUT.PUT_LINE('HELLO WORLD!');
END;
-- ํ๋ก์์ ์ ํธ์ถ
EXEC NEW_JOB_PROC;
[ ํ๋ก์์ ๋งค๊ฐ๋ณ์ IN ]
์ ๋ ฅ๋งค๊ฐ๋ณ์๋ฅผ ์๋ฏธํ๋ค.
[ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์ DEFAULT ]
๋งค๊ฐ๋ณ์๊ฐ ์ ๊ณต๋์ง์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ด ์ฌ์ฉ๋๋๋ก ํ๋ค.
CREATE OR REPLACE PROCEDURE NEW_JOB_PROC
(P_JOB_ID IN JOBS.JOB_ID%TYPE, --IN๊ตฌ๋ฌธ
P_JOB_TITLE IN JOBS.JOB_TITLE%TYPE, --IN๊ตฌ๋ฌธ
P_MIN_SAL IN JOBS.MIN_SALARY%TYPE := 0, --DEFAULT๋งค๊ฐ๋ณ์
P_MAX_SAL IN JOBS.MAX_SALARY%TYPE := 1000 --DEFAULT๋งค๊ฐ๋ณ์
)
IS
-- ์ง์ญ๋ณ์ ์ ์ธ ์์ญ
BEGIN
INSERT INTO JOBS
VALUES(P_JOB_ID, P_JOB_TITLE, P_MIN_SAL, P_MAX_SAL);
END;
-- ํ๋ก์์ ์ ํธ์ถ
EXEC NEW_JOB_PROC('SM_MAN1', 'sample test', 1000, 5000);
--๋งค๊ฐ๊ฐ์ ๊ฐ์๊ฐ ์ผ์นํ์ง ์์์ ์๋ฌ!!!!!!!
--EXEC NEW_JOB_PROC('SM_KKK');
-- ํ๋ก์์ ์ ํธ์ถ(๊ธฐ๋ณธ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋จ)
EXEC NEW_JOB_PROC('SM_KKK', 'sample');
[ ํ๋ก์์ OUT ]
ํ๋ก์์ ์ ๋ฐ์ผ๋ก ์ค ๊ฐ์ด ์์ ๋ ์ฌ์ฉ
๋ฐ์ผ๋ก ์ ๋ฌํ ์ ์๋ ๋งค๊ฐ๋ณ์๊ฐ ๋๋ค.
(์ธ์ผ ๊ฑฐ์์๋ค)
CREATE OR REPLACE PROCEDURE NEW_JOB_PROC
(P_JOB_ID IN JOBS.JOB_ID%TYPE,
P_RESULT OUT NUMBER --์์๋งค๊ฐ๋ณ์
)
IS
V_COUNT NUMBER := 0; --์ง์ญ๋ณ์
BEGIN
SELECT COUNT(*)
INTO V_COUNT --์ง์ญ๋ณ์
FROM EMPLOYEES
WHERE JOB_ID = P_JOB_ID;
IF V_COUNT = 0 THEN
P_RESULT := 0;
ELSE
P_RESULT := V_COUNT; --์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ฌธ์ฅ ์ ์ฅ
END IF;
END;
-- OUT๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ ค๋ฉด, ์ต๋ช
๋ธ๋ก์์ ์ฌ์ฉํฉ๋๋ค.
DECLARE
CNT NUMBER; -- ํ๋ก์์ ๋ด๋ถ์์ ๊ฐ์ ๋ฐ์์ฌ OUT๋ณ์
BEGIN
NEW_JOB_PROC('IT_PROG', CNT);
DBMS_OUTPUT.PUT_LINE('ํ์์:' || CNT);
END;
[ RETURN ํ๋ก์์ ์ข
๋ฃ ]
RETRUN ๊ตฌ๋ฌธ์ ์ด์ฉํด์ ํ๋ก์์ ๊ฐ์ ์ข
๋ฃ ๊ฐ๋ฅ
[ ์์ธ์ฒ๋ฆฌ๋ฌธ TRY-CATCH ]
์๋ฐ์ TRY-CATCH ๋ฌธ์ฅ์ฒ๋ผ ์์ธ๊ฐ ๋ฐ์๋๋ฉด
์ฒ๋ฆฌ ๋ ๋ฌธ์ฅ
EXCEPTION WHEN OTHERS THEN
CREATE OR REPLACE PROCEDURE NEW_JOB_PROC
(P_JOB_ID IN JOBS.JOB_ID%TYPE
)
IS
V_COUNT NUMBER := 0;
V_MIN_TOTAL NUMBER := 0; --์ต์๊ธ์ฌ ์ ์ฒดํฉ
BEGIN
--๊ฐ์ด ์๋ค๋ฉด ์ถ๋ ฅํ์ ํ๋ก์์ ๋ฅผ ์ข
๋ฃ, ์๋ค๋ฉด ๊ฐ ์ถ๋ ฅ
SELECT COUNT(*)
INTO V_COUNT
FROM JOBS
WHERE JOB_ID LIKE '%' || P_JOB_ID || '%';
IF V_COUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE(P_JOB_ID || '๊ฐ์ด ์์ต๋๋ค');
RETURN; --ํ๋ก์์ ์ ์ข
๋ฃ
ELSE
--P_JOB_ID์ ์ต์๊ธ์ฌ ์ ์ฒดํฉ
SELECT SUM(MIN_SALARY)
INTO V_MIN_TOTAL
FROM JOBS
WHERE JOB_ID LIKE '%' || P_JOB_ID || '%';
DBMS_OUTPUT.PUT_LINE(P_JOB_ID || '์ MIN_SALARY ํฉ:' || V_MIN_TOTAL);
END IF;
DBMS_OUTPUT.PUT_LINE('ํ๋ก์์ ์ ์์ข
๋ฃ');
--์์ธ์ฒ๋ฆฌ๋ฌธ์ฅ
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('์์ธ๊ฐ ๋ฐ์ํ์ต๋๋ค');
END;
EXEC NEW_JOB_PROC('TETS');
EXEC NEW_JOB_PROC('MAN');