๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/ORACLE

(29)[ORACLE] 12์ผ์ฐจ : PL/SQL - 4 (์˜ˆ์™ธ์ฒ˜๋ฆฌ)

by ๋”ฐ๊ถˆ 2024. 3. 27.

 

 

์˜ˆ์™ธ๋ž€?
PL/SQL ๋ธ”๋ก์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐœ์ƒ๋˜๋Š” ์—๋Ÿฌ๋ฅผ ์˜ˆ์™ธ๋ผ ํ•œ๋‹ค. 
์ปดํŒŒ์ผ ์—๋Ÿฌ : PL/SQL ๋ธ”๋ก์ด ํŒŒ์‹ฑ๋ ๋•Œ ์‚ฌ์šฉ์ž ์˜คํƒ€,๊ตฌ๋ฌธ ์˜ค๋ฅ˜ ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒ๋˜๋Š” ์—๋Ÿฌ
๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ : PL/SQL ๋ธ”๋ก์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ 
Exception์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

์˜ค๋ผํด ์˜ˆ์™ธ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์˜ค๋ผํด ์˜ˆ์™ธ, PL/SQL ์ฝ”๋“œ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ERROR์„ ๋ฏธ๋ฆฌ ์ •์˜
๋ฏธ๋ฆฌ ์ •์˜๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ,๊ธฐํƒ€ ํ‘œ์ค€(์‚ฌ์šฉ์ž๊ฐ€ ์„ ์–ธํ•˜๊ณ  ์˜ค๋ผํด ์„œ๋ฒ„๊ฐ€ ์•”์‹œ์ ์œผ๋กœ ๋ฐœ์ƒ)
์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ •ํ•œ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ(์‚ฌ์šฉ์ž๊ฐ€ ์„ ์–ธํ•˜๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.)
DECLARE
        vNAME VARCHAR2(30);
        vSal  NUMBER;
BEGIN
        --SELECT name,sal INTO vName, vSal FROM emp WHERE empNo = '1001';
        --SELECT name,sal INTO vName, vSal FROM emp WHERE empNo = '8001';
        SELECT name,sal INTO vName, vSal FROM emp;
        DBMS_OUTPUT.PUT_LINE(vName ||':'|| vSal);
               
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
            DBMS_OUTPUT.PUT_LINE('์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ');   
            WHEN TOO_MANY_ROWS THEN
            DBMS_OUTPUT.PUT_LINE('๋‘๊ฐœ ์ด์ƒ ์กด์žฌ');
            WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('๊ธฐํƒ€ ์˜ˆ์™ธ ๋ฐœ์ƒ');
END;
/

 

 

-- ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ 

DECLARE
    vNAME VARCHAR2(30);
    vSal  NUMBER;
    
    emp_sal_check EXCEPTION;
BEGIN
    SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '1001';
    
    IF vSal >= 3000000 THEN
        RAISE emp_sal_check; -- ์˜ˆ์™ธ ๋ฐœ์ƒ 
    END IF;
    
    DBMS_OUTPUT.PUT_LINE(vName || ':' || vSal);
           
EXCEPTION
    WHEN emp_sal_check THEN
        DBMS_OUTPUT.PUT_LINE('๊ธ‰์—ฌ๊ฐ€ 300๋งŒ์› ์ด์ƒ์ž…๋‹ˆ๋‹ค');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('๊ธฐํƒ€ ์˜ˆ์™ธ ๋ฐœ์ƒ');
END;
/