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 |