■ CAST 의사 함수를 사용하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
-- 색상 연관 배열 타입을 생성한다. CREATE TYPE COLOR_ARRAY_TYPE IS VARRAY(16) OF VARCHAR2(30); -- 색상 모델 테이블을 생성한다. CREATE TABLE COLOR_MODEL ( MODEL_TYPE VARCHAR2(10) ,NAME_COLOR_ARRAY COLOR_ARRAY_TYPE ); -- 색상 모델 테이블에 데이터를 추가한다. INSERT INTO COLOR_MODEL VALUES ('RGB', COLOR_ARRAY_TYPE('RED', 'GREEN', 'BLUE')); -- 색상 중첩 테이블 타입을 생성한다. CREATE TYPE COLOR_TABLE_TYPE AS TABLE OF VARCHAR2(30); -- CAST 의사 함수를 사용해 색상 연관 배열 컬럼을 색상 중첩 테이블 타입으로 변환해 해당 컬럼 데이터를 조회한다. SELECT COLUMN_VALUE FROM THE ( SELECT CAST(NAME_COLOR_ARRAY AS COLOR_TABLE_TYPE) FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB' ); |
■ TABLE 의사 함수를 사용하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
-- 색상 중첩 테이블 타입을 생성한다. CREATE TYPE COLOR_TABLE_TYPE IS TABLE OF VARCHAR2(30); -- 색상 모델 테이블을 생성한다. CREATE TABLE COLOR_MODEL ( MODEL_TYPE VARCHAR2(10) ,NAME_COLOR_TABLE COLOR_TABLE_TYPE ) NESTED TABLE NAME_COLOR_TABLE STORE AS NAME_COLOR; -- 색상 모델 테이블에 데이터를 추가한다. INSERT INTO COLOR_MODEL VALUES ('RGB', COLOR_TABLE_TYPE('RED', 'GREEN', 'BLUE')); -- 명칭 색상 테이블 컬럼에 'RED'가 있는 색상 모델 테이블 데이터를 조회한다. SELECT * FROM COLOR_MODEL C WHERE 'RED' IN (SELECT * FROM TABLE(c.NAME_COLOR_TABLE)); |
■ THE 의사 함수를 사용해 중첩 테이블 컬럼의 데이터를 수정하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
-- 색상 중첩 테이블 타입을 생성한다. CREATE TYPE COLOR_TABLE_TYPE IS TABLE OF VARCHAR2(30); -- 색상 모델 테이블을 생성한다. CREATE TABLE COLOR_MODEL ( MODEL_TYPE VARCHAR2(10) ,NAME_COLOR_TABLE COLOR_TABLE_TYPE ) NESTED TABLE NAME_COLOR_TABLE STORE AS NAME_COLOR; -- 색상 모델 테이블에 데이터를 추가한다. INSERT INTO COLOR_MODEL VALUES ('RGB', COLOR_TABLE_TYPE('RED', 'GREEN', 'BLUE')); -- 모델 타입이 'RGB'인 레코드의 명칭 색상 중첩 테이블 컬럼에서 'BLUE'인 데이터를 'BURGUNDY'로 변경한다. UPDATE THE(SELECT NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB') SET COLUMN_VALUE = 'BURGUNDY' WHERE COLUMN_VALUE = 'BLUE'; SELECT COLUMN_VALUE FROM THE(SELECT NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB'); /* RED GREEN BURGUNDY */ |
■ THE 의사 함수를 사용해 중첩 테이블 컬럼의 데이터를 삭제하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
-- 색상 중첩 테이블 타입을 생성한다. CREATE TYPE COLOR_TABLE_TYPE IS TABLE OF VARCHAR2(30); -- 색상 모델 테이블을 생성한다. CREATE TABLE COLOR_MODEL ( MODEL_TYPE VARCHAR2(10) ,NAME_COLOR_TABLE COLOR_TABLE_TYPE ) NESTED TABLE NAME_COLOR_TABLE STORE AS NAME_COLOR; -- 색상 모델 테이블에 데이터를 추가한다. INSERT INTO COLOR_MODEL VALUES ('RGB', COLOR_TABLE_TYPE('RED', 'GREEN', 'BLUE')); -- 모델 타입이 'BLUE'인 레코드의 명칭 색상 중첩 테이블 컬럼에서 'BLUE'인 데이터를 삭제한다. DELETE THE(SELECT NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB') WHERE COLUMN_VALUE = 'BLUE'; SELECT COLUMN_VALUE FROM THE(SELECT NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB'); /* RED GREEN */ |
■ THE 의사 함수를 사용해 중첩 테이블 컬럼의 데이터를 추가하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
-- 색상 중첩 테이블 타입을 생성한다. CREATE TYPE COLOR_TABLE_TYPE IS TABLE OF VARCHAR2(30); -- 색상 모델 테이블을 생성한다. CREATE TABLE COLOR_MODEL ( MODEL_TYPE VARCHAR2(10) ,NAME_COLOR_TABLE COLOR_TABLE_TYPE ) NESTED TABLE NAME_COLOR_TABLE STORE AS NAME_COLOR; -- 색상 모델 테이블에 데이터를 추가한다. INSERT INTO COLOR_MODEL VALUES ('RGB', COLOR_TABLE_TYPE('RED', 'GREEN', 'BLUE')); -- 모델 타입이 'RGB'인 레코드에서 명칭 색상 중첩 테이블 컬럼에 'EXTRA-COLOR' 데이터를 추가한다. INSERT INTO THE(SELECT NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB') VALUES ('EXTRA-COLOR'); SELECT COLUMN_VALUE FROM THE(SELECT NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB'); /* RED GREEN BLUE EXTRA-COLOR */ |
■ THE 의사 함수를 사용해 중첩 테이블 컬럼을 조회하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
-- 색상 중첩 테이블 타입을 생성한다. CREATE TYPE COLOR_TABLE_TYPE IS TABLE OF VARCHAR2(30); -- 색상 모델 테이블을 생성한다. CREATE TABLE COLOR_MODEL ( MODEL_TYPE VARCHAR2(10) ,NAME_COLOR_TABLE COLOR_TABLE_TYPE ) NESTED TABLE NAME_COLOR_TABLE STORE AS NAME_COLOR; -- 색상 모델 테이블에 데이터를 추가한다. INSERT INTO COLOR_MODEL VALUES ('RGB', COLOR_TABLE_TYPE('RED', 'GREEN', 'BLUE')); -- 모델 타입이 'RGB'인 레코드에서 명칭 색상 중첩 테이블 컬럼의 데이터를 조회한다. SELECT VALUE(C) FROM THE(SELECT NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB') C; 또는 SELECT COLUMN_VALUE FROM THE(SELECT NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB'); /* RED GREEN BLUE */ |
■ 객체 타입을 사용하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
-- 애완동물 객체 타입을 생성한다. CREATE TYPE PET_OBJECT_TYPE IS OBJECT ( TAG_NO INTEGER ,NAME VARCHAR2(50) ); SET SERVEROUTPUT ON; DECLARE -- 애완동물 중첩 테이블 타입을 정의한다. TYPE PET_TABLE_TYPE IS TABLE OF PET_OBJECT_TYPE; -- 애완동물 중첩 테이블 변수를 정의한다. V_PET_TABLE PET_TABLE_TYPE := PET_TABLE_TYPE(PET_OBJECT_TYPE(1050, 'Sammy'), PET_OBJECT_TYPE(1075, 'Mercury')); BEGIN FOR I IN V_PET_TABLE.FIRST..V_PET_TABLE.LAST LOOP DBMS_OUTPUT.put_line(V_PET_TABLE(I).NAME); END LOOP; END; |
■ 레코드 타입을 항목으로 갖는 연관 배열을 사용하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
SET SERVEROUTPUT ON; DECLARE -- 직원 테이블을 조회하는 커서를 정의한다. CURSOR EMPLOYEE_CURSOR IS SELECT * FROM SCOTT.EMP ORDER BY ENAME; -- 직원 커서의 레코드 타입을 항목으로 갖는 연관 배열 타입을 정의한다. TYPE EMPLOYEE_ARRAY_TYPE IS TABLE OF EMPLOYEE_CURSOR%ROWTYPE INDEX BY BINARY_INTEGER; -- 직원 연관 배열 타입의 변수를 정의한다. V_EMPLOYEE_ARRAY EMPLOYEE_ARRAY_TYPE; -- 연관 배열을 조작하는 인덱스 변수를 정의한다. V_CURRENT_INDEX BINARY_INTEGER; V_LAST_INDEX BINARY_INTEGER; BEGIN -- 직원 커서를 조회해 직원 연관 배열 데이터를 설정한다. FOR EMPLOYEE_RECORD IN EMPLOYEE_CURSOR LOOP V_EMPLOYEE_ARRAY(EMPLOYEE_RECORD.EMPNO) := EMPLOYEE_RECORD; END LOOP; -- 연관 배열 데이터를 출력한다. V_CURRENT_INDEX := V_EMPLOYEE_ARRAY.FIRST; V_LAST_INDEX := V_EMPLOYEE_ARRAY.LAST; LOOP DBMS_OUTPUT.PUT_LINE(V_EMPLOYEE_ARRAY(V_CURRENT_INDEX).ENAME); EXIT WHEN V_CURRENT_INDEX >= V_LAST_INDEX; V_CURRENT_INDEX := V_EMPLOYEE_ARRAY.NEXT(V_CURRENT_INDEX); END LOOP; END; |
■ 중첩 테이블을 테이블 컬럼으로 저장하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
-- 색상 중첩 테이블 타입을 생성한다. CREATE TYPE COLOR_TABLE_TYPE IS TABLE OF VARCHAR2(30); -- 색상 모델 테이블을 생성한다. CREATE TABLE COLOR_MODEL ( MODEL_TYPE VARCHAR2(10) ,NAME_COLOR_TABLE COLOR_TABLE_TYPE ) NESTED TABLE NAME_COLOR_TABLE STORE AS NAME_COLOR; -- 색상 모델 테이블에 데이터를 추가한다. INSERT INTO COLOR_MODEL VALUES ('RGB', COLOR_TABLE_TYPE('RED', 'GREEN', 'BLUE')); SET SERVEROUTPUT ON; DECLARE -- 색상 중첩 테이블 변수를 정의한다. V_NAME_COLOR_TABLE COLOR_TABLE_TYPE; BEGIN -- 색상 모델 테이블에서 모델 타입이 'RGB'인 레코드를 조회해 색상 중첩 테이블 변수에 설정한다. SELECT NAME_COLOR_TABLE INTO V_NAME_COLOR_TABLE FROM COLOR_MODEL WHERE MODEL_TYPE = 'RGB'; FOR I IN 1..V_NAME_COLOR_TABLE.COUNT LOOP DBMS_OUTPUT.PUT_LINE(V_NAME_COLOR_TABLE(I)); END LOOP; END; /* REG GREEN BLUE */ |
■ VARRAY 타입의 LIMIT 함수를 사용해 최대 항목 수를 구하는 방법을 보여준다. ▶ 예제 코드 (SQL)
|
CREATE TYPE NUMBER_ARRAY_TYPE IS VARRAY(100) OF NUMBER; SET SERVEROUTPUT ON; DECLARE V_NUMBER_ARRAY NUMBER_ARRAY_TYPE := NUMBER_ARRAY_TYPE(7369, 7499, 7521); BEGIN DBMS_OUTPUT.PUT_LINE(V_NUMBER_ARRAY.LIMIT); -- 100 DBMS_OUTPUT.PUT_LINE(V_NUMBER_ARRAY.COUNT); -- 3 END; |
■ 중첩 테이블의 TRIM 함수를 사용해 항목을 제거하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01', '1990-03-02', '1993-06-01'); BEGIN V_BIRTHDAY_TABLE.EXTEND(3); V_BIRTHDAY_TABLE(5) := '2019-11-03'; V_BIRTHDAY_TABLE(6) := '2019-11-04'; V_BIRTHDAY_TABLE(7) := '2019-11-05'; V_BIRTHDAY_TABLE.TRIM(2); -- 6번, 7번 항목을 제거한다. DBMS_OUTPUT.PUT_LINE(V_BIRTHDAY_TABLE.COUNT); -- 5 END; |
■ 중첩 테이블의 NEXT 함수를 사용해 다음 항목의 인덱스를 구하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01', '1990-03-02', '1993-06-01'); BEGIN V_BIRTHDAY_TABLE.EXTEND(3); V_BIRTHDAY_TABLE(5) := '2019-11-03'; V_BIRTHDAY_TABLE(6) := '2019-11-04'; V_BIRTHDAY_TABLE(7) := '2019-11-05'; DBMS_OUTPUT.PUT_LINE(V_BIRTHDAY_TABLE.NEXT(V_BIRTHDAY_TABLE.FIRST)); -- 2 END; |
■ 중첩 테이블의 PRIOR 함수를 사용해 이전 항목의 인덱스를 구하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01', '1990-03-02', '1993-06-01'); BEGIN V_BIRTHDAY_TABLE.EXTEND(3); V_BIRTHDAY_TABLE(5) := '2019-11-03'; V_BIRTHDAY_TABLE(6) := '2019-11-04'; V_BIRTHDAY_TABLE(7) := '2019-11-05'; DBMS_OUTPUT.PUT_LINE(V_BIRTHDAY_TABLE.PRIOR(V_BIRTHDAY_TABLE.LAST)); -- 6 END; |
■ 중첩 테이블의 FIRST 함수를 사용해 첫번째 항목의 인덱스를 구하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01', '1990-03-02', '1993-06-01'); BEGIN V_BIRTHDAY_TABLE.EXTEND(3); V_BIRTHDAY_TABLE(5) := '2019-11-03'; V_BIRTHDAY_TABLE(6) := '2019-11-04'; V_BIRTHDAY_TABLE(7) := '2019-11-05'; DBMS_OUTPUT.PUT_LINE(V_BIRTHDAY_TABLE.FIRST); -- 1 END; |
■ 중첩 테이블의 LAST 함수를 사용해 마지막 항목의 인덱스를 구하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01', '1990-03-02', '1993-06-01'); BEGIN V_BIRTHDAY_TABLE.EXTEND(3); V_BIRTHDAY_TABLE(5) := '2019-11-03'; V_BIRTHDAY_TABLE(6) := '2019-11-04'; V_BIRTHDAY_TABLE(7) := '2019-11-05'; DBMS_OUTPUT.PUT_LINE(V_BIRTHDAY_TABLE.LAST); -- 7 END; |
■ 중첩 테이블의 EXTEND 함수를 사용해 NULL 항목을 추가하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01', '1990-03-02', '1993-06-01'); BEGIN V_BIRTHDAY_TABLE.EXTEND(3); V_BIRTHDAY_TABLE(5) := '2019-11-03'; V_BIRTHDAY_TABLE(6) := '2019-11-04'; V_BIRTHDAY_TABLE(7) := '2019-11-05'; DBMS_OUTPUT.PUT_LINE(V_BIRTHDAY_TABLE.COUNT); -- 7 END; |
■ 중첩 테이블의 EXISTS 함수를 사용해 항목 존재 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01', '1990-03-02', '1993-06-01'); BEGIN V_BIRTHDAY_TABLE.DELETE(2, 3); IF V_BIRTHDAY_TABLE.EXISTS(2) THEN DBMS_OUTPUT.PUT_LINE('EXISTS'); ELSE DBMS_OUTPUT.PUT_LINE('NOT EXISTS'); END IF; END; |
■ 중첩 테이블의 DELETE 함수를 사용해 항목을 삭제하는 방법을 보여준다. ▶ 예제 코드 (SQL)
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01', '1990-03-02', '1993-06-01'); BEGIN V_BIRTHDAY_TABLE.DELETE(2, 3); -- 2, 3번 항목을 삭제한다. DBMS_OUTPUT.PUT_LINE(V_BIRTHDAY_TABLE.COUNT); -- 2 END; |
■ 중첩 테이블의 COUNT 함수를 사용해 항목 수를 구하는 방법을 보여준다. ▶ 예제 코드 (SQL)
|
SET SERVEROUTPUT ON; DECLARE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; V_BIRTHDAY_TABLE DATE_TABLE_TYPE := DATE_TABLE_TYPE('1958-09-23', '1986-10-01'); BEGIN DBMS_OUTPUT.PUT_LINE(V_BIRTHDAY_TABLE.COUNT); -- 2 END; |
■ VARRAY 타입으로 테이블 컬럼으로 저장하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
-- 부양자 생일 연관 배열 타입을 생성한다. CREATE TYPE DEPENDENT_BIRTHDATE_ARRAY_TYPE IS VARRAY(10) OF DATE; -- 직원 테이블을 생성한다. CREATE TABLE EMPLOYEE ( ID NUMBER ,NAME VARCHAR2(50) ,DEPENDENT_BIRTHDATE_ARRAY DEPENDENT_BIRTHDATE_ARRAY_TYPE ); -- 직원 테이블에 데이터를 추가한다. INSERT INTO EMPLOYEE VALUES (35, 'James Bond', DEPENDENT_BIRTHDATE_ARRAY_TYPE('2019-01-01', '2019-02-01')); SELECT * FROM EMPLOYEE; |
■ 중첩 테이블을 테이블 컬럼으로 저장하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
-- 일자 중첩 테이블 타입을 생성한다. CREATE TYPE DATE_TABLE_TYPE IS TABLE OF DATE; -- 직원 테이블을 생성한다. CREATE TABLE EMPLOYEE ( ID NUMBER ,NAME VARCHAR2(50) ,DEPENDENT_BIRTHDATE_TABLE DATE_TABLE_TYPE ) NESTED TABLE DEPENDENT_BIRTHDATE_TABLE STORE AS DEPENDENT_BIRTHDATE_TABLE; -- 직원 테이블에 데이터를 추가한다. INSERT INTO EMPLOYEE VALUES (42, 'Zaphod Beeblebrox', DATE_TABLE_TYPE('2019-01-01', '2019-10-01')); SELECT * FROM EMPLOYEE; |
■ 커서 기반의 레코드를 사용하는 방법을 보여준다. ▶ 예제 코드 (SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
SET SERVEROUTPUT ON; DECLARE -- 직원 커서를 정의한다. CURSOR EMPLOYEE_CURSOR IS SELECT * FROM SCOTT.EMP; -- 직원 커서의 레코드 타입의 변수를 정의한다. V_EMPLOYEE_RECORD EMPLOYEE_CURSOR%ROWTYPE; BEGIN OPEN EMPLOYEE_CURSOR; LOOP -- 직원 커서의 데이터를 읽어서 직원 레코드 변수에 저장한다. FETCH EMPLOYEE_CURSOR INTO V_EMPLOYEE_RECORD; EXIT WHEN EMPLOYEE_CURSOR%NOTFOUND; DBMS_OUTPUT.PUT_LINE(V_EMPLOYEE_RECORD.ENAME); END LOOP; CLOSE EMPLOYEE_CURSOR; END; |
■ NEXT_DAY 함수를 사용해 특정일 다음에 오는 요일의 날짜를 구하는 방법을 보여준다. ▶ 예제 코드 (SQL)
|
SET SERVEROUTPUT ON; DECLARE V_SOURCE_DATE DATE := TO_DATE('2019-11-02', 'yyyy-mm-dd'); V_TARGET_DATE DATE; BEGIN V_TARGET_DATE := NEXT_DAY(V_SOURCE_DATE, '금요일'); DBMS_OUTPUT.PUT_LINE(TO_CHAR(V_TARGET_DATE, 'yyyy-mm-dd')); --2019-11-08 END; |
■ 포맷 마스크를 사용하는 방법을 보여준다. ▶ 포맷 마스크
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
───────────────────────────────────────────────── 포맷 마스크 반올림 또는 절삭 위치 ─────────────────── ───────────────────────────── CC or SSC 세기 SYYY, YYYY, YEAR, SYEAR, YYY, YY, or Y 년도(6월 1일부터 다음 년도로 반올림) IYYY, IYY, IY, or I 표준 ISO 년도 Q 분기(해당 분기의 두 번째 달 16일에 반올림) MONTH, MON, MM, or RM 달(16일에 반올림. 반드시 해당 달의 중간 일자일 필요 없음) WW 해당 주 중, 해당 년도의 첫째 날과 동일한 날 IW 해당 주 중, 해당 ISO 년도의 첫째 날과 동일한 날 W 해당 주 중, 해당 달의 첫째 날과 동일한 날 DDD, DD or J 날 DAY, DY, or D 해당 주의 시작일 HH, HH12, HH24 시간 MI 분 ───────────────────────────────────────────────── |
■ NEW_TIME 함수를 사용해 시간대를 변환하는 방법을 보여준다. ▶ 예제 코드 (SQL)
|
SET SERVEROUTPUT ON; DECLARE V_SOURCE_DATE DATE := TO_DATE('2019-10-01 14:00:00', 'yyyy-mm-dd hh24:mi;ss'); V_TARGET_DATE DATE; BEGIN V_TARGET_DATE := NEW_TIME(V_SOURCE_DATE, 'CST', 'PST'); DBMS_OUTPUT.PUT_LINE(TO_CHAR(V_SOURCE_DATE, 'yyyy-mm-dd hh24:mi;ss')); -- 2019-10-01 14:00;00 DBMS_OUTPUT.PUT_LINE(TO_CHAR(V_TARGET_DATE, 'yyyy-mm-dd hh24:mi;ss')); -- 2019-10-01 11:00;00 END; |
※ V$TIMEZONE_NAMES에 있는 모든 시간대 축약어를 NEW_TIME에 사용할 수
더 읽기