
사용자정의타입 생성
CRATE TYPE 타입명 IS VARRAY(크기) OF 데이터 타입;
예제 1 (VARRAY)
CREATE TYPE TEST_VARRAY IS VARRAY(3) OF NUMBER;
길이가 3이고 데이터 유형이 숫자인 배열생성
create or replace NONEDITIONABLE PROCEDURE PROC_TYPE_TEST_1 AS
V_ARY TEST_VARRAY;
V_NUM NUMBER;
BEGIN
V_ARY := TEST_VARRAY(0,0,0);
V_ARY(1) := 4;
V_ARY(2) := 11;
V_ARY(3) := 55;
V_NUM := V_ARY(1) + V_ARY(2) + V_ARY(3);
DBMS_OUTPUT.PUT_LINE(V_NUM);
END PROC_TYPE_TEST_1;
전제 배열의 합을 구하는 프로시져, 4 + 11 + 55 = 70 출력
예제 2 (COLLECTION)
CREATE TYPE TEST_TABLE IS TABLE OF VARCHAR2(20);
데이터 타입 VARCHAR2 테이블 생성, 갯수 제한없이 사용 가능
CREATE OR REPLACE PROCEDURE PROC_TYPE_TEST_2 AS
V_TABLE TEST_TABLE;
V_NAME VARCHAR2(100);
BEGIN
V_TABLE := TEST_TABLE('가나다', '마바사', '아자차');
V_NAME := V_TABLE(1) || V_TABLE(2) || V_TABLE(3);
DBMS_OUTPUT.PUT_LINE(V_NAME);
END PROC_TYPE_TEST_2;
테이블 내 데이터 붙이는 프로시저, '가나다마바사아자차' 출력
CREATE TYPE TEST_TBL IS TABLE OF NUMBER;
데이터 타입 NUMBER 테이블 생성, 갯수 제한없이 사용 가능
DECLARE
V_TABEL TEST_TBL;
V_NUM NUMBER(5);
BEGIN
V_TABEL := TEST_TBL(3,4,5,6,7,8);
V_NUM := V_TABEL(1) + V_TABEL(2) + V_TABEL(3) + V_TABEL(4) + V_TABEL(5) + V_TABEL(6);
DBMS_OUTPUT.PUT_LINE(V_NUM);
END
;
테이블 내 데이터 덧샘 프로시저, 33 출력
예제 3 (OBJECT)
CREATE TYPE TEST_OBJ AS OBJECT
(
C_ID CHAR(6),
C_POINT NUMBER(10)
);
객체 생성
CREATE OR REPLACE PROCEDURE PROC_TYPE_TEST_3 AS
V_OBJ TEST_OBJ;
BEGIN
V_OBJ := TEST_OBJ('O0001', 10000);
DBMS_OUTPUT.PUT_LINE(V_OBJ.O_ID || '+' || V_OBJ.O_POINT);
END PROC_TYPE_TEST_3;
객체 내 데이터 붙이는 프로시저, O0001 +10000 출력
V_OBJ TEST_OBJ;
패키지 HEAD 내에서 유형 선언 시 패키지 내에서 JS 의 전역변수와 같이 사용 가능
TYPE TEST_TBL IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
패키지 HEAD 내 유형 선언 시 패키지 내에서 또 한 번 선언하지 않고도 바로 사용 가능
예제 4
CREATE TABLE CUSTOMER_TBL
(
C_ID CHAR(6),
C_NAME VARCHAR(30),
C_BIRTH DATE
);
PROCEDURE TEST
AS
RTYPE CUSTOMER_TBL%ROWTYPE; -- TBL 의 로우한줄한줄
V_C_ID CUSTOMER_TBL.C_ID%TYPE; -- TBL 의 컬럼 한개
BEGIN
SELECT C_ID, C_NAME, C_BIRTH
INTO RTYPE.C_ID, RTYPE.C_NAME, RTYPE.C_BIRTH
FROM CUSTOMER_TBL
;
END TEST;
↓ 상단 쿼리 중요 부분 ↓
RTYPE CUSTOMER_TBL%ROWTYPE; -- TBL 의 로우한줄한줄
V_C_ID CUSTOMER_TBL.C_ID%TYPE; -- TBL 의 컬럼 한개
변수를 프로시저 내에서 컬럼한개한개를 사용하고 싶거나 로우 한줄한줄 전체를 사용하고 싶을 때 상단의 쿼리와 같이 사용할 수 있다.
'Database' 카테고리의 다른 글
[ JAVA ] 추상화(abstract) - 공통된 특성 (0) | 2021.05.27 |
---|---|
[ SQL ] 숫자 타입 별 작업 속도 차이 (0) | 2021.05.14 |
[ SQL ] SCHEDULER (스케줄러) (0) | 2021.05.13 |
[ SQL ] 반복문 (0) | 2021.05.12 |
[ SQL ] ORACLE INDEX (0) | 2021.05.12 |