문제/SQL

231030 PL/SQL 복습

잇꼬 2023. 10. 30. 15:30
728x90
반응형
SMALL

# 배열 ⓐ FOR LOOP문

DECLARE
    TYPE my_array_type/*데이터 타입명*/ IS TABLE OF/*데이터 생성*/ varchar2(20)/*데이터 타입*/ INDEX BY PLS_INTEGER;
    v_array my_array_type;
BEGIN
    v_array(0) := 'zero';
    v_array(1) := 'one';
    v_array(2) := 'two';
    v_array(3) := 'three';
    v_array(4) := 'four';
    v_array(9) := 'nine';
    v_array(-10) := 'negative ten';
    
    -- 1차원 배열
    DBMS_OUTPUT.PUT_LINE(v_array(-10));
    DBMS_OUTPUT.PUT_LINE(' ');
       
    DBMS_OUTPUT.PUT_LINE(v_array.FIRST);
    DBMS_OUTPUT.PUT_LINE(v_array.LAST);
    DBMS_OUTPUT.PUT_LINE(' ');

    -- 배열의 순서
    FOR i IN v_array.first .. v_array.last LOOP
        IF v_array.EXISTS(i) THEN
            DBMS_OUTPUT.PUT_LINE(v_array(i));
        END IF;
    END LOOP;
END;
/



# 배열 ⓑ 기본 LOOP 문

DECLARE
    TYPE my_array_type/*데이터 타입명*/ IS TABLE OF/*데이터 생성*/ varchar2(20)/*데이터 타입*/ INDEX BY PLS_INTEGER;
    v_array my_array_type;
    idx PLS_INTEGER; -- 배열의 변수
BEGIN
    v_array(0) := 'zero';
    v_array(1) := 'one';
    v_array(2) := 'two';
    v_array(3) := 'three';
    v_array(4) := 'four';
    v_array(9) := 'nine';
    v_array(-10) := 'negative ten';
    
    idx := v_array.FIRST;
    
    LOOP
        DBMS_OUTPUT.PUT_LINE(v_array(idx));
        exit;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE(' ');
    
    LOOP
        DBMS_OUTPUT.PUT_LINE(v_array(idx));
        idx := v_array.NEXT(idx); /* ORA-06502: PL/SQL: numeric or value error: NULL index table key value */
                                -- exit가 없이 실행하게 되면, null 값으로 출력 + 오류발생
            IF idx IS NULL THEN  -- null값을 IF문으로 EXIT 으로 실행.
                EXIT;
            END IF;
    END LOOP;
END;
/


# 배열 ⓒ while loop 문

DECLARE
    TYPE my_array_type IS TABLE OF varchar2(20) INDEX BY PLS_INTEGER;
    v_array my_array_type;
    idx PLS_INTEGER; -- 배열의 변수
BEGIN
    v_array(0) := 'zero';
    v_array(1) := 'one';
    v_array(2) := 'two';
    v_array(3) := 'three';
    v_array(4) := 'four';
    v_array(9) := 'nine';
    v_array(-10) := 'negative ten';
    
    idx := v_array.FIRST;
    
    WHILE idx IS NOT NULL LOOP
        DBMS_OUTPUT.PUT_LINE(v_array(idx));
        idx := v_array.NEXT(idx); -- 배열.NEXT(): 순서
    END LOOP;
END;
/


# 배열 ⓓ  역순서

DECLARE
    TYPE my_array_type IS TABLE OF varchar2(20) INDEX BY PLS_INTEGER;
    v_array my_array_type;
    idx PLS_INTEGER; -- 배열의 변수
BEGIN
    v_array(0) := 'zero';
    v_array(1) := 'one';
    v_array(2) := 'two';
    v_array(3) := 'three';
    v_array(4) := 'four';
    v_array(9) := 'nine';
    v_array(-10) := 'negative ten';
    
    idx := v_array.LAST; -- 배열 역순서 : SQL의 'ORDER BY'절
    
    WHILE idx IS NOT NULL LOOP
        DBMS_OUTPUT.PUT_LINE(v_array(idx));
        idx := v_array.PRIOR(idx); -- 배열.PRIOR(): 역순서
    END LOOP;
END;
/
728x90
반응형
LIST

'문제 > SQL' 카테고리의 다른 글

231031 PL/SQL 복습 겸 문제  (1) 2023.10.31
231030 PL/SQL 복습 겸 문제  (1) 2023.10.30
231027 PL/SQL 복습 겸 문제  (0) 2023.10.30
231026 PL/SQL 복습 겸 문제  (1) 2023.10.26
231024 Oracle SQL 실기 TEST's 오답노트  (0) 2023.10.24