본문 바로가기
오라클 게시판/오라클 함수

【오라클 SQL 함수】 SYS_TYPEID 함수

by 기서무나구물 2021. 10. 21.

포스팅 목차

     

    SYS_TYPEID

     


    문법

     

    sys_typeid::=

     


    목적 

    SYS_TYPEID함수는 피연산자(operand)의 가장 구체적인 형태의 typeid를 반환한다. 이 값은 주로 대체 가능한 열의 기초가 되는 형태 판별 열을 식별하는데 이용된다.

    예를 들면, 형태-판별 열에서 색인을 만들기 위해서 SYS_TYPEID에 의해 반환되는 값을 이용할 수 있다.

    Object 형태 피연자에서 이함수를 이용할 수 있다. 모든 최종 root object형태(형태 계층에 속하지 않는 최종 형태)는 Null typeid를 가진다. 오라클 데이터 베이스는 type 계층에 속하는 모든 형태에 unique non-null typeid를 할당한다.

     


    관련 함수

    함수명 함수내용
    SYS_CONTEXT 문맥 namespace와 관련된 parameter의 값을 반환.
    SYS_GUID 16바이트로 구성된 고유전역식별자(globally unique identifier,RAW 값)을 생성하여 반환.
    SYS_TYPEID 피연산자(operand)의 대부분 지정한 형태의 typeid를 반환.
    UID 세션 사용자의 유일한 식별하는 정수를 반환.(로그인 유저)
    USER VARCHAR2 형태를 가지는 세션 사용자(로그인 유저)의 이름을 반환.
    USERENV 현재 세션에 대한 정보를 반환.

     


    예제

    Oracle Program
    CREATE TYPE Person_typ AS OBJECT ( ssn NUMBER, name VARCHAR2(30), address VARCHAR2(100)) NOT FINAL;
    
    CREATE TABLE persons OF Person_typ;
    INSERT INTO persons
      VALUES (Person_typ(1243, ’Bob’, ’121 Front St’));
    INSERT INTO persons
      VALUES (Student_typ(3456, ’Joe’, ’34 View’, 12, ’HISTORY’));
    INSERT INTO persons
      VALUES (PartTimeStudent_typ(5678, ’Tim’, 13, ’PHYSICS’, 20));

     


    다음 예제는 "Substitutable Table and Column Examples". 에서 만들어진 persons와 books 테이블을 이용한다. 양쪽 테이블 모두 "Type Hierarchy Example". 에서 생성된 person_t 타입을 사용한다. 첫 번째 쿼리는 persons 테이블에서 저장된 object instances의 가장 많이 지정한 타입을 반환한다.

    Oracle Program
    SELECT name, 
           SYS_TYPEID(VALUE(p)) "Type_id"
    FROM   persons p;
    Results
    NAME                      Type_id
    ------------------------- --------------------------------
    Bob                       01
    Joe                       02
    Tim                       03

     


    다음 쿼리는 books테이블에 저장된 저자의 가장 많이 지정된 타입을 반환한다.

    Oracle Program
    CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn NUMBER)
    NOT FINAL;
    
    CREATE TABLE books (title VARCHAR2(100), author person_t);
    CREATE TYPE employee_t UNDER person_t (department_id NUMBER, salary NUMBER) NOT FINAL;
    CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs NUMBER);
    
    INSERT INTO books VALUES ('An Autobiography', person_t('Bob', 1234));
    INSERT INTO books VALUES ('Business Rules', employee_t('Joe', 3456, 12, 10000));
    INSERT INTO books VALUES ('Mixing School and Work', part_time_emp_t('Tim', 5678, 13, 1000, 20));

     

    SELECT b.title, b.author.name, 
           SYS_TYPEID(author) "Type_ID"
    FROM   books b;

     

    Results
    TITLE                     AUTHOR.NAME          Type_ID
    ------------------------- -------------------- -------------------
    An Autobiography          Bob                  01
    Business Rules            Joe                  02
    Mixing School and Work    Tim                  03

    테이블의 type-discriminant 열에 인덱스를 생성하기 위해서 SYS_TYPEID 함수를 이용한다.

     


    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크
    반응형

    댓글