MapleStory Finger Point Cute Line Smiley Blinking Hello Kitty Angel MapleStory Finger Point

๐Ÿ’Ž DataBase/๐Ÿ’Ž SQL-PL,SQL

หšโ‚Šโœฉโ€งโ‚Š [PL/SQL] ํ”„๋กœ์‹œ์ € Procedure หšโ‚Šโœฉโ€งโ‚Š

HYEJU01 2024. 6. 27. 23:40

[ ํ”„๋กœ์‹œ์ € ] 

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');