hyeonga_code

Database_83_PL/SQL_제어 구조_조건 제어문 본문

Oracle Database

Database_83_PL/SQL_제어 구조_조건 제어문

hyeonga 2023. 8. 31. 05:59
반응형

-- PL/SQL 제어 구조
    -- 실행 흐름 제어
        -- 조건 IF 문과 루프 제어 구조를 사용하여 명령문의 논리적 실행 흐름을 변경할 수 있습니다.
    -- 조건 제어문
        -- IF 문
            /*
            IF condition THEN
                statements;
            [ ELSIF condition THEN -- 추가 조건을 적용합니다.
                statements; ]
            [ ELSE 
                statements; ]
            END IF;
            */
            -- 다른 절차적 언어의 IF문의 구조와 유사합니다.
            -- 조건에 따라 선택적으로 작업을 수행할 수 있습니다.
            -- 단순 IF문 : IF-THEN-END IF
                /*
                IF condition THEN
                    statements;
                END IF;
                */
                -- 조건이 TRUE일 경우에만 변수에 값을 할당합니다.
                -- NULL, FALSE일 경우 명령문을 무시합니다.
            -- IF-THEN-ELSE-END IF
                /*
                IF condition1 THEN 
                    statement1;
                ELSE 
                    statement2;
                END IF;
                */
            -- IF-THEN-ELSIF-END IF
                /*
                IF condition1 THEN
                    sequence_of_statements1;
                ELSIF condition2 THEN
                    sequence_of_statements2;
                ELSE
                    sequence_of_statements3;
                END IF;
                */
            -- IF 문의 NULL 값
                -- 조건이 TRUE일 경우에만 변수에 값을 할당합니다.
                -- NULL 값이면 ELSE 절을 실행합니다.
    
    -- IF문
SET SERVEROUTPUT ON;
DECLARE
    v_myage number:=31;
BEGIN
    IF v_myage < 11
    THEN
        DBMS_OUTPUT.PUT_LINE(' I am a child '); 
    END IF;
END;
/
    /*
    PL/SQL 프로시저가 성공적으로 완료되었습니다.
        -- 예제 조건이 FALSE이므로 명령문을 무시합니다.
    */

    -- IF ELSE 문
        -- ELSE 대신 ELSIF를 사용해도 무관합니다.
DECLARE
v_myage number:=31;
BEGIN
    IF 
    v_myage < 11 THEN
        DBMS_OUTPUT.PUT_LINE(' I am a child '); 
    ELSE
        DBMS_OUTPUT.PUT_LINE(' I am not a child ');
    END IF;
END;
/
    /*
    I am not a child 
    
    PL/SQL 프로시저가 성공적으로 완료되었습니다.
    */
    
    -- ELSIF문
DECLARE
    v_myage number:=31;
BEGIN
    IF v_myage < 11 THEN
        DBMS_OUTPUT.PUT_LINE(' I am a child ');
    ELSIF v_myage < 20 THEN
        DBMS_OUTPUT.PUT_LINE(' I am young ');
    ELSIF v_myage < 30 THEN
        DBMS_OUTPUT.PUT_LINE(' I am in my twenties');
    ELSIF v_myage < 40 THEN
        DBMS_OUTPUT.PUT_LINE(' I am in my thirties');
    ELSE
        DBMS_OUTPUT.PUT_LINE(' I am always young ');
    END IF;
END;
/
    /*
    I am in my thirties

    PL/SQL 프로시저가 성공적으로 완료되었습니다.
    */    
    
-- IF문의 NULL 값
DECLARE 
    v_myage number; 
BEGIN 
    IF v_myage < 11 THEN 
        DBMS_OUTPUT.PUT_LINE(' I am a child '); 
    ELSE 
        DBMS_OUTPUT.PUT_LINE(' I am not a child '); 
    END IF; 
END; 
/
    /*
    I am not a child 

    PL/SQL 프로시저가 성공적으로 완료되었습니다.
    */
    
        -- CASE 문
            /*
            1)
            CASE selector
                WHEN expression1 THEN result1
                [WHEN expression2 THEN result2
                ...
                WHEN expressionN THEN resultN]
                [ELSE resultN+1]
            END;
            
            2)
            CASE
                WHEN search_condition1 THEN result1
                WHEN search_condition2 THEN result2
                ...
                WHEN search_conditionN THEN resultN
                [ELSE resultN+1;]
            END;
            */
            -- 결과를 선택하고 반환합니다.
            -- 결과를 선택할 때 해당 값이 여러 조건 중 하나를 선택하는 데에 사용되는 선택자를 통해 선택합니다.

-- 치환 변수를 사용하여 입력받은 등급을 평가합니다.
SET VERIFY OFF
DECLARE
v_grade CHAR(1):=UPPER('&grade');
v_appraisal VARCHAR2(20);
BEGIN
    v_appraisal:=CASE v_grade 
                            WHEN 'A' THEN 'Excellent'
                            WHEN 'B' THEN 'Very Good'
                            WHEN 'C' THEN 'Good'
                            ELSE 'No such grade'
                    END;
    DBMS_OUTPUT.PUT_LINE ('Grade: '|| v_grade || ' Appraisal ' || v_appraisal);
END;
/         
        
-- 검색된 CASE 표현식으로 작성합니다.
SET VERIFY OFF
DECLARE
    v_grade CHAR(1):=UPPER('&grade');
    v_appraisal VARCHAR2(20);
BEGIN
    v_appraisal:=CASE 
                    WHEN v_grade = 'A' THEN 'Excellent'
                    WHEN v_grade = 'B' THEN 'Very Good' 
                    WHEN v_grade = 'C' THEN 'Good' 
                    ELSE 'No such grade' 
                 END;
    DBMS_OUTPUT.PUT_LINE ('Grade: '|| v_grade || ' Appraisal ' || v_appraisal);
END;
/
    /*
    -- A 입력
    Grade: A Appraisal Excellent
    -- B 입력
    Grade: B Appraisal Very Good
    -- C 입력
    Grade: C Appraisal Good
    -- E 입력
    Grade: E Appraisal No such grade
    
    PL/SQL 프로시저가 성공적으로 완료되었습니다.
    */

반응형