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;

좋은 웹페이지 즐겨찾기