oracle 사용자 정의 형식, RECORD,VARRAY,TABLE 사용 설명
4571 단어 PL/SQL
설명
1.1 RECORD
레코드 데이터 유형을 정의합니다.이것은 C 언어의 구조 데이터 형식(STRUCTURE)과 유사하다. PL/SQL은 몇 가지 관련되고 분리된 기본 데이터 형식의 변수를 하나의 전체적인 방법, 즉 RECORD 복합 데이터 형식으로 구성하는 방법을 제공한다.기록 데이터 형식 변수를 사용할 때, 성명 부분에서 기록의 구성, 기록 변수를 정의한 다음, 실행 부분에서 이 기록 변수 자체나 그 중의 구성원을 인용해야 한다.
레코드 데이터 유형을 정의하는 구문은 다음과 같습니다.
TYPE RECORD_NAME IS RECORD(
V1 DATA_TYPE1 [NOT NULL][:=DEFAULT_VALUE],
V2 DATA_TYPE2 [NOT NULL][:=DEFAULT_VALUE],
VN DATA_TYPEN [NOT NULL][:=DEFAULT_VALUE]);
1.2 VARRAY
수조는 같은 데이터 형식을 가진 구성원의 집합이다.모든 구성원은 하나의 유일한 하표를 가지고 있으며, 이것은 구성원이 그룹의 위치에 달려 있다.PL/SQL에서 배열 데이터 유형은 VARRRAY(variable array, 배열 변환)입니다.
VARRAY 데이터 유형을 정의하는 구문은 다음과 같습니다.
TYPE VARRAY_NAMEIS VARRAY(SIZE) OF ELEMENT_TYPE [NOT NULL];
여기서 varrayname은VARRAY 데이터 형식의 이름이며, size는 정수로 수용할 수 있는 구성원의 최대 수량을 표시하며, 각 구성원의 데이터 형식은elementtypeo는 기본적으로 구성원이 빈 값을 가질 수 있으며 그렇지 않으면 NOT NULL을 사용하여 제한할 수 있습니다.
1.3 TABLE
레코드표(또는 색인표) 데이터 형식을 정의합니다.그것은 기록 형식과 비슷하지만, 기록 형식에 대한 확장이다.이것은 C 언어의 2차원 그룹과 같은 여러 줄 기록을 처리할 수 있어 PL/SQL에서 데이터베이스에 있는 표를 모방할 수 있다.
레코드 테이블 유형을 정의하는 구문은 다음과 같습니다.
TYPE TABLE NAME IS TABLE OF ELEMENT_TYPE [NOT NULL]
INDEX BY [BINARY_INTEGER|PLS_INTEGER|VARRAY2];
키 INDEX BY 는 레코드테이블 변수의 특정 행을 참조하는 키 인덱스를 만듭니다.
BINARY_INTEGER 설명
예: TYPE NUMBERS IS TABLE OF NUMBER INDEX BY BINNARYINTEGER;"INDEX BYBINARY"INTEGER 이후 NUMBERS 유형의 아래 첨자는 자체 증가입니다. NUMBERS 유형은 요소를 삽입할 때 초기화할 필요가 없고 매번 EXTEND에 공간을 추가할 필요가 없습니다.
"INDEXBY BINARY INTEGER"라는 말이 없으면 초기화를 표시하고 NUMBERS 타입의 TABLE에 요소를 삽입할 때마다 EXTEND가 먼저 필요합니다.
1. 테스트 표를 작성한다.
--
CREATE TABLE SF_ORG
(
ORG_ID INT NOT NULL, -- ID
ORG_NAME VARCHAR2(50),--
PARENT_ID INT--
)
--
INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(1, ' 1',0);
--
INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(2, ' 2',1);
INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(3, ' 3',1);
INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(4, ' 4',1);
2. record의 예:
DECLARE
TYPE TYPE_ORG_RECORD IS RECORD(
V_ORG_NAME SF_ORG.ORG_NAME%TYPE,
V_PARENT_ID SF_ORG.PARENT_ID%TYPE);
V_ORG_RECORD TYPE_ORG_RECORD;
BEGIN
SELECT ORG_NAME,PARENT_ID INTO V_ORG_RECORD
FROM SF_ORG SO
WHERE SO.ORG_ID=&ORG_ID;
DBMS_OUTPUT.PUT_LINE(' :' || V_ORG_RECORD.V_ORG_NAME);
DBMS_OUTPUT.PUT_LINE(' :' || TO_CHAR(V_ORG_RECORD.V_PARENT_ID));
END;
3. varray의 예:
DECLARE
TYPE ORG_VARRAY_TYPE IS VARRAY(5) OF VARCHAR2(25);
V_ORG_VARRAY ORG_VARRAY_TYPE;
BEGIN
V_ORG_VARRAY := ORG_VARRAY_TYPE('1','2','3','4','5');
DBMS_OUTPUT.PUT_LINE(' 1:' || V_ORG_VARRAY(1) || '、'|| V_ORG_VARRAY(2) || '、'|| V_ORG_VARRAY(3) || '、'|| V_ORG_VARRAY(4));
DBMS_OUTPUT.PUT_LINE(' 2:' || V_ORG_VARRAY(5));
V_ORG_VARRAY(5) := '5001';
DBMS_OUTPUT.PUT_LINE(' 3:' || V_ORG_VARRAY(5));
END;
4. 테이블의 예:
DECLARE
TYPE ORG_TABLE_TYPE IS TABLE OF VARCHAR2(25)
INDEX BY BINARY_INTEGER;
V_ORG_TABLE ORG_TABLE_TYPE;
BEGIN
V_ORG_TABLE(1) := '1';
V_ORG_TABLE(2) := '2';
V_ORG_TABLE(3) := '3';
V_ORG_TABLE(4) := '4';
V_ORG_TABLE(5) := '5';
DBMS_OUTPUT.PUT_LINE(' 1:' || V_ORG_TABLE(1) || '、'|| V_ORG_TABLE(2) || '、'|| V_ORG_TABLE(3) || '、'|| V_ORG_TABLE(4));
DBMS_OUTPUT.PUT_LINE(' 2:' || V_ORG_TABLE(5));
END;
DECLARE
TYPE T_TYPE IS TABLE OF SF_ORG%ROWTYPE;
V_TYPE T_TYPE;
BEGIN
SELECT ORG_ID,ORG_NAME,PARENT_ID BULK COLLECT INTO V_TYPE
FROM SF_ORG
WHERE SF_ORG.ORG_ID <= 3;
FOR V_INDEX IN V_TYPE.FIRST .. V_TYPE.LAST LOOP
DBMS_OUTPUT.PUT_LINE(V_TYPE(V_INDEX).C1 || ' ' || V_TYPE(V_INDEX).C2);
END LOOP;
END;
DECLARE
TYPE TEST_EMP IS RECORD
(
C1 SF_ORG.ORG_NAME%TYPE,
C2 SF_ORG.PARENT_ID%TYPE
);
TYPE T_TYPE IS TABLE OF TEST_EMP;
V_TYPE T_TYPE;
BEGIN
SELECT ORG_NAME, PARENT_ID BULK COLLECT INTO V_TYPE
FROM SF_ORG
WHERE SF_ORG.ORG_ID <= 3;
FOR V_INDEX IN V_TYPE.FIRST .. V_TYPE.LAST LOOP
DBMS_OUTPUT.PUT_LINE(V_TYPE(V_INDEX).C1 || ' ' || V_TYPE(V_INDEX).C2);
END LOOP;
END;