All pages
1 of 93

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

O2 Extensions

본 안내서는 OpenSQL을 사용하는 사용자를 대상으로 기술합니다.

O2 Extensions는 TmaxTibero의 OpenSQL에서만 지원되는 확장 기능이므로, 이에 대한 기술 문서는 OpenSQL 매뉴얼에 'O2 Extensions' 항목으로 통합하여 제공합니다.

참조 안내서

설치 안내서

집계함수(Aggregate Functions)

조건함수(Conditional Functions)

날짜시간함수(DateTime Functions)

Format 함수(Format Functions)

Math 함수(Math Functions)

Misc 함수(Misc Functions)

텍스트 함수(Text Functions)

XML 함수(XML Functions)

환경 함수(Environment Functions)

패키지(Package) 참조 안내서

패키지(Package) 참조 안내서입니다.

TroubleShooting

아키텍처 개요

PostgreSQL의 Extension 소개

PostgreSQL은 확장성이 뛰어난 오픈소스 데이터베이스로 잘 알려져 있습니다. 이러한 명성을 이루는 데에는 PostgreSQL의 기능을 유연하게 확장할 수 있는 Extension Framework가 큰 역할을 합니다. Extension을 활용한 기능 확장은 PostgreSQL의 다양한 데이터 타입 및 함수 지원을 가능하게 하며, 더 나아가 내부 기능의 개선도 가능합니다.

Extension의 중요한 특징은 PostgreSQL 인스턴스에 동적으로 로딩 된다는 것입니다. 즉, PostgreSQL에서는 Extension을 통해 새로운 기능을 추가할 때 소스를 다시 빌드하거나 실행 파일을 교체할 필요가 없습니다. 인스턴스 기동 시 초기화 작업이 필요한 Extension을 제외하면, Extension을 추가할 때 인스턴스를 다시 기동하는 일도 필요 없습니다. 이러한 점 때문에 PostgreSQL에서는 새로운 기능을 추가하는 작업이 매우 간편합니다.


O2 Extensions 소개

O2는 OpenSQL for Oracle의 약어로, Oracle 데이터 타입, 뷰, 내장 함수 및 내장 패키지를 호환해주는 Extension의 집합입니다. O2는 오픈소스 프로젝트인 Orafce를 기반으로 시작되었지만, 다양한 방면에서 많은 변화가 있었습니다. 원래 하나의 Extension으로 관리되었던 Orafce를 여러 개의 Extension으로 분리하였습니다.

O2 Extensions에는 아래 Extension이 포함되어 있습니다.

  • O2Types: Oracle 데이터 타입 호환 Extension

  • O2Views: Oracle 뷰 호환 Extension

  • O2Functions: Oracle 내장 함수 호환 Extension

  • Package Extensions: Oracle 내장 패키지 호환 Extension 모음

    • DBMS_ALERT

    • DBMS_ASSERT

    • DBMS_OUTPUT

원래 하나의 Extension으로 관리되었던 Orafce를 여러 개의 Extension으로 분리하여, 패치 작업의 유연성을 크게 향상 시켰습니다. 또한, 오랜 기간 동안 점진적으로 개발되면서 공통된 컨벤션이나 프레임워크의 부재가 문제였는데, 이를 통합하는 과정에서 개선시켰습니다.


O2 Extension에서 제공하는 내장 함수나 패키지는 내부적으로 사용자 정의 함수(UDF)로 구성되어 있습니다. PostgreSQL은 사용자 정의 함수를 작성할 때 SQL, PL/pgSQL뿐만 아니라 C/C++, Python, Perl, Rust 등 다양한 프로그래밍 언어를 지원합니다. O2 Extension은 특히 SQL 및 PL/pgSQL로 작성된 사용자 정의 함수를 C 코드로 변경하여 성능을 향상시켰습니다.

PostgreSQL Query 실행 엔진이 SQL이나 PL/pgSQL로 작성된 UDF를 실행할 때 내부적으로 커서를 생성하여 서브쿼리를 실행하지만, C 코드로 작성된 함수는 컴파일 된 라이브러리에서 직접 실행되므로 빠른 성능을 보장합니다. 또한, C 코드로 구현하면 PostgreSQL 라이브러리를 활용하여 더 정교하고 유연한 구현이 가능합니다.

기존 Orafce는 하나의 Extension으로 관리되었기 때문에, 전체 구현 중 하나의 요소에 문제가 발생하면 전체 Extension을 업데이트해야 했습니다. 반면, O2는 여러 개의 Extension으로 나누어 관리함으로써, 문제가 발생한 Extension만 교체하면 됩니다. 예를 들어, DBMS_ALERT나 DBMS_PIPE와 같이 공유 메모리를 사용하는 패키지는 shared_preload_libraries에 추가하여 DB 인스턴스를 기동해야 하는데, O2의 경우 이들 Extension이 별도로 분리되어 있어 필요한 Extension만 shared_preload_libraries에 추가하면 되도록 개선했습니다. 이와 같은 개선 사항들은 O2 Extension이 PostgreSQL 사용자들에게 더 강력하고 유연한 Oracle 호환 기능을 제공할 수 있습니다. 또한, O2 Extension의 도입으로 인해 성능, 유연성, 안정성이 크게 향상되었습니다.

SQL 함수(SQL function) 참조 안내서

o2functions extension 설치 후 신규 함수들이 추가되며, 아래의 2가지 형식으로 사용하여야 합니다.

스키마(기본 oracle)의 이름을 function 앞에 추가하여 사용합니다.

스키마(기본 oracle)를 가장 높은 우선순위 search_path로 설정한 경우, 스키마를 생략하고 사용할 수 있습니다.

각 함수들 사양은 스키마를 생략한 형태로 기술합니다.

DBTIMEZONE


dbtimezone 함수는 서버의 기본 시간대를 텍스트 형태로 반환합니다.

내부적으로는 현재 데이터베이스의 설정을 확인하기 위해 pg_db_role_setting 테이블을 조회하며,

만약 해당 설정이 없으면 pg_settings에서 기본 TimeZone 값을 가져옵니다.

즉, 서버에 설정된 기본 시간대를 조회해서 문자열로 제공합니다.


SESSIONTIMEZONE


sessiontimezone 함수는 현재 세션의 타임존을 텍스트 값으로 반환합니다.

내부적으로는 show_timezone() 함수를 호출하여 현재 세션의 시간대를 조회한 후, 이를 텍스트로 변환해 반환합니다.


SYSDATE


sysdate 함수는 서버 시간대 기준의 현재 문(statement) 타임스탬프를 반환합니다.

Oracle의 sysdate와 유사하게 동작하며, 반환되는 타임스탬프는 소수 자릿수를 제거하여 Oracle DATE 타입처럼 사용됩니다.


SYSTIMESTAMP


systimestamp 함수는 현재 문(statement)의 타임스탬프를 서버의 시간대 기준으로 반환합니다.

내부적으로는 GetCurrentTimestamp()를 호출하여 서버의 타임존에 맞춰 타임스탬프 값을 가져옵니다.


SINH


SINH는 num의 hyperbolic sine입니다.

파라미터
설명

SYS_GUID


SYS_GUID는 16 바이트의 RAW 데이터로 구성된 전역 고유 식별자를 생성해서 반환합니다.

uuid는 pseudorandom 방식으로 생성됩니다.


DBMS_PIPE

  • DBMS_RANDOM

  • DBMS_SCHEDULER

  • DBMS_SQL

  • DBMS_JOB

  • DBMS_RLS

  • UTL_FILE

  • O2 Extensions 장점과 개선 사항

    SQL, PL/pgSQL로 작성된 사용자 정의 함수를 C 코드로 변경

    Extension을 여러 개로 나누어 Blast Radius 감소

    {schema_name}.{function_name}
    
    -- 예시) o2views extension 설치 후, 새로 추가된 sysdate라는 함수 사용
    -- select oracle.sysdate();
    

    search_path를 설정하지 않은 경우

    search_path를 설정한 경우

    Syntax

    개요

    예제

    Syntax

    개요

    예제

    Syntax

    개요

    예제

    Syntax

    개요

    예제

    num

    Numeric data type이거나 Numeric으로 변환될 수 있는 data type을 인자로 취할 수 있습니다.

    반환 타입은 인자로 주었던 numeric data type과 같습니다.

    Syntax

    개요

    파라미터

    예제

    Syntax

    개요

    예제

    LAST_DAY

    Syntax


    개요

    주어진 날짜가 속한 달의 마지막 날짜를 반환합니다.

    DATE 타입의 경우, 단순히 그 달의 마지막 일자를 계산하며, TIMESTAMPTZ 타입의 경우에는 날짜를 절삭한 후 원래의 시간 정보를 결합하여 타임스탬프 값을 반환합니다.

    파라미터

    파라미터
    설명

    value

    date, timestamptz 타입입니다; 마지막 날짜를 구할 기준 날짜입니다. timestamptz의 경우, 해당 달의 첫 날을 구한 후 한 달을 더하고 하루를 빼는 방식으로 계산합니다.


    예제

    TO_SINGLE_BYTE

    Syntax


    개요

    입력된 다중 바이트 문자열을 가능한 경우 해당하는 단일 바이트(ASCII) 문자로 변환합니다.

    입력 문자열에서 다중 바이트 문자가 미리 정의된 매핑 테이블에 의해 단일 바이트 값(대개 ASCII 코드 0x20 이상의 값)으로 치환되며, 변환이 불가능한 문자는 원래 그대로 반환됩니다.

    파라미터

    파라미터
    설명

    str

    text 타입입니다; 변환할 대상 문자열입니다. 다중 바이트 문자들이 단일 바이트 문자로 변환됩니다.


    예제

    COSH

    Syntax


    개요

    COSH는 n의 hyperbolic cosine입니다.

    파라미터

    파라미터
    설명

    num

    Numeric data type이거나 Numeric으로 변환될 수 있는 data type을 인자로 취할 수 있습니다.

    반환 타입은 인자로 주었던 numeric data type과 같습니다.


    예제

    TANH

    Syntax


    개요

    COSH는 n의 hyperbolic cosine입니다.

    파라미터

    파라미터
    설명

    num

    Numeric data type이거나 Numeric으로 변환될 수 있는 data type을 인자로 취할 수 있습니다.

    반환 타입은 인자로 주었던 numeric data type과 같습니다.


    예제

    BIN_TO_NUM

    Syntax


    개요

    BIN_TO_NUM는 bit vector를 해당 정수 값으로 변환해주는 함수입니다.

    파라미터

    파라미터
    설명

    expr

    expr는 숫자형 타입이나 숫자형 타입으로 변환될 수 있는 값을 반환하는 임의의 연산식입니다.expr의 반환 값이 숫자형 타입이 아니면 숫자형 타입으로 변환 후 정수 값으로 변환해서 사용합니다. (trunc() 결과와 같다)변환 후의 정수 값은 0 또는 1 이어야 합니다.


    예제

    LENGTH

    Syntax


    개요

    LENGTH 는 주어진 str의 길이를 반환합니다.

    파라미터

    파라미터
    설명

    str

    문자열을 반환하는 임의의 연산식입니다. CHAR, TEXT 타입을 가질 수 있습니다.


    예제

    ASCIISTR

    Syntax


    개요

    ASCIISTR은 주어진 문자열을 데이터베이스 문자 집합의 아스키 문자열로 반환합니다. ASCII 이외의 문자는 \xxxx 형태로 변경됩니다. xxxx는 UTF-16 코드입니다.

    파라미터

    파라미터
    설명

    str

    문자열을 반환하는 임의의 연산식입니다.


    예제

    HEXTORAW

    Syntax


    개요

    HEXTORAW는 16진수로 표현된 문자열의 RAW 값을 구하는 함수입니다.

    파라미터

    파라미터
    설명

    str

    16진수 형태의 문자열 값을 반환하는 임의의 연산식입니다.


    예제

    RAWTONHEX

    Syntax


    개요

    RAWTONHEX는 문자열 raw 값을 16진수로 표현된 문자열로 바꾸는 함수입니다.

    파라미터

    파라미터
    설명

    raw

    문자열 값을 반환하는 임의의 연산식입니다.


    예제

    RAWTOHEX

    Syntax


    개요

    RAWTOHEX는 문자열 raw 값을 16진수로 표현된 문자열로 바꾸는 함수입니다.

    파라미터

    파라미터
    설명

    raw

    문자열 값을 반환하는 임의의 연산식입니다.


    예제

    -- 현재 접속 세션에서 스키마 'oracle'를 가장 우선순위 높은 search_path로 설정
    set search_path to oracle, public;
    
    {function_name}
    
    -- 예시) o2views extension 설치 후, 새로 추가된 sysdate라는 함수 사용
    -- select sysdate();
    DBTIMEZONE()
    RETURNS text;
    select dbtimezone();
    
     dbtimezone 
    ------------
     Asia/Seoul
    (1 row)
    SESSIONTIMEZONE()
    RETURNS text;
    select sessiontimezone();
    
     sessiontimezone 
    -----------------
     Asia/Seoul
    (1 row)
    SYSDATE()
    RETURN TIMESTAMP;
    select sysdate();
    
           sysdate       
    ---------------------
     2025-03-06 22:39:05
    (1 row)
    SYSTIMESTAMP()
    RETURNS timestamptz;
    SELECT SYSTIMESTAMP();
    
             systimestamp          
    -------------------------------
     2025-03-06 23:41:29.160617+09
    (1 row)
    SINH(num)
    SELECT SINH(0);
     sinh 
    ------
        0
    SYS_GUID()
    SELECT SYS_GUID();
                  sys_guid              
    ------------------------------------
     \xc3a83bc2e6f845c8bdf884af0c0516ac
    (1 row)
    LAST_DAY
    (
      value  IN date
    )
    RETURNS date;
    
    LAST_DAY
    (
      value  IN TIMESTAMP with time zone
    )
    RETURNS TIMESTAMP without time zone;
    -- DATE 타입 예제: '2023-05-15'가 속한 달의 마지막 날짜 반환
    SELECT LAST_DAY('2023-05-15'::date);
    -- 결과: '2023-05-31' (2023년 5월의 마지막 날)
    
      last_day  
    ------------
     2023-05-31
    (1 row)
    
    -- TIMESTAMPTZ 타입 예제: '2023-05-15 14:30:00+09'가 속한 달의 마지막 날짜 반환
    SELECT LAST_DAY('2023-05-15 14:30:00+09'::timestamptz);
    -- 결과: 타임스탬프 값으로 해당 달의 마지막 날과 원래 시간 정보가 결합되어 반환됨
    
          last_day       
    ---------------------
     2023-05-31 14:30:00
    (1 row)
    TO_SINGLE_BYTE
    (
      str  IN text
    )
    RETURNS text;
    SELECT TO_SINGLE_BYTE('Hello, world!');
    -- 예제 결과: 'Hello, world!'
    
     to_single_byte 
    ----------------
     Hello, world!
    (1 row)
    COSH(num)
    SELECT COSH(0);
     cosh 
    ------
        1
    COSH(num)
    SELECT TANH(0);
     tanh 
    ------
        0
    BIN_TO_NUM
    (
      expr1, expr2, ..., exprn IN numeric  -- variadic: treated as numeric[]
    )
    RETURNS numeric;
    SELECT BIN_TO_NUM(1,0,1);
     bin_to_num 
    ------------
              5
    (1개 행)
    
    SELECT BIN_TO_NUM('1',0,1);
     bin_to_num 
    ------------
              5
    (1개 행)
    
    SELECT BIN_TO_NUM('2',0,1);
    ERROR:  Invalid value in array, only 0 and 1 are allowed
    LENGTH(str)
     SELECT LENGTH('abc'::char(6));
     length 
    --------
          6
    (1 row)
    
     SELECT LENGTH(''::char(6));
     length 
    --------
          6
    (1 row)
    ASCIISTR
    (
      str IN text
    )
    RETURNS text;
    SELECT ASCIISTR('A한글B');
       asciistr   
    --------------
     A\D55C\AE00B
    (1개 행)
    HEXTORAW
    (
      str IN text
    )
    RETURNS bytea;
    SELECT HEXTORAW('DB') AS col;
     col  
    ------
     \xdb
    (1개 행)
    RAWTOHEX
    (
      raw IN { bytea | text }
    )
    RETURNS text;
    SELECT RAWTONHEX('AB');
     rawtohex 
    ----------
     4142
    (1개 행)
    RAWTOHEX
    (
      raw IN { bytea | text }
    )
    RETURNS text;
    SELECT RAWTOHEX('AB');
     rawtohex 
    ----------
     4142
    (1개 행)

    GREATEST

    Syntex

    GREATEST
    (
      expr1       IN anynonarray,
      expr_array  IN variadic anyarray
    )
    RETURNS anynonarray;

    개요

    GREATEST 함수는 전달된 인자들 중에서 가장 큰 값을 반환합니다.

    만약 인자 중 하나라도 NULL이면, 전체 결과가 NULL이 됩니다.

    PostgreSQL 기본 함수는 모든 인자가 NULL일 때만 NULL을 반환하는데, 이 함수는 하나라도 NULL이면 NULL을 반환합니다.

    파라미터

    파라미터
    설명

    expr1


    LEAST

    Syntax

    LEAST
    (
      expr1       IN anynonarray,
      expr_array  IN variadic anyarray
    )
    RETURNS anynonarray;

    개요

    LEAST 함수는 전달된 인자들 중에서 가장 작은 값을 반환합니다.

    만약 인자 중 하나라도 NULL이면, 전체 결과가 NULL이 됩니다.

    PostgreSQL 기본 함수는 모든 인자가 NULL일 때만 NULL을 반환하는데, 이 함수는 하나라도 NULL이면 NULL이 됩니다.

    파라미터

    파라미터
    설명

    expr1


    LNNVL

    Syntax

    LNNVL
    (
      value  IN boolean
    )
    RETURNS boolean;

    개요

    lnnvl 함수는 입력된 불리언 값에 대해 반대 값을 반환합니다.

    즉, 인자가 true면 false를, false면 true를 반환합니다.

    또한, 인자가 NULL이면 true를 반환합니다.

    파라미터

    파라미터
    설명

    value


    NANVL

    Syntax

    NANVL
    (
      value         IN { real, double precision, numeric },
      replacement   IN { varchar, real, double precision, numeric }
    )
    RETURNS { real, double precision, numeric };

    개요

    NANVL 함수는 첫 번째 인자가 NaN(Not a Number)이면 두 번째 인자값을 반환하고, NaN이 아니면 첫 번째 인자값을 그대로 반환합니다.

    두 번째 인자가 varchar 가 아니라면, 첫 번째 인자와 타입이 동일해야 합니다.

    부동 소수점이나 숫자형 데이터에서 NaN을 다른 값으로 대체할 때 쓰입니다.

    파라미터

    파라미터
    설명

    MONTHS_BETWEEN

    Syntax

    MONTHS_BETWEEN
    (
      date1  IN date,
      date2  IN date
    )
    RETURNS numeric;
    
    MONTHS_BETWEEN
    (
      timestamptz1  IN timestamptz,
      timestamptz2  IN timestamptz
    )
    RETURNS numeric;

    개요

    MONTHS_BETWEEN 함수는 두 날짜(또는 타임스탬프) 사이의 개월 수를 계산해서 반환합니다.

    두 날짜의 연, 월, 일을 비교하여 개월 차이를 구하는데, 만약 두 날짜 모두 해당 월의 마지막 날이면 정수 개월 수로 계산합니다.

    그렇지 않은 경우에는 일(day) 차이를 31일로 나눈 값이 소수점 이하로 더해져 반환됩니다. 즉, 소수점 이하 값은 31일 기준으로 계산됩니다.

    파라미터

    파라미터
    설명

    date1 / timestamptz1


    SYS_EXTRACT_UTC

    Syntax

    SYS_EXTRACT_UTC
    (
      time  IN timestamp with time zone
    )
    RETURNS timestamp without time zone;
    
    SYS_EXTRACT_UTC
    (
      time  IN timestamp without time zone
    )
    RETURNS timestamp without time zone;

    개요

    입력받은 타임스탬프(with/without time zone)를 UTC 기준의 타임스탬프(without timezone)로 변환해서 반환합니다.

    TIMESTAMP(without time zone)의 경우, 명시한 timezone 정보와 관계 없이 값을 세션의 timezone을 기준으로 해석한 후, 해당 값을 UTC 기준의 타임스탬프로 변환해서 반환합니다.

    즉, 명시한 timezone에 따라 해당 함수를 적용 하고 싶을 시, 반드시 TIMESTAMP가 아닌 TIMESTAMPTZ 타입을 사용해야 합니다.

    파라미터

    파라미터
    설명

    time


    NUMTOYMINTERVAL

    Syntax

    NUMTOYMINTERVAL
    (
      expr             IN numeric,
      interval_unit    IN text
    )
    RETURNS interval;

    개요

    NUMTOYMINTERVAL은 입력으로 들어온 값을 년도-달 구간 형식으로 변환하는 함수입니다.

    파라미터

    파라미터
    설명

    expr

    변환할 입력 값입니다.

    interval_unit


    TO_YMINTERVAL

    Syntax

    TO_YMINTERVAL
    (
      sql_format IN text -- format: '[+|-]years-months'
    )
    RETURNS interval;
    
    TO_YMINTERVAL
    (
      ym_iso_format IN text -- format: '[-]P[<years>Y][<months>M]'
    )
    RETURNS interval;

    개요

    TO_YMINTERVAL은 문자열을 INTERVAL YEAR TO MONTH 타입으로 변환하는 함수입니다.

    파라미터

    파라미터
    설명

    sql_format

    구간의 값을 반환하는 text 타입이며, 다음과 같은 포맷으로 구성됩니다. '[+|-]years-months'

    ym_iso_format

    구성요소
    설명

    TO_MULTI_BYTE

    Syntax

    TO_MULTI_BYTE
    (
      str  IN text
    )
    RETURNS text;

    개요

    단일 바이트(ASCII) 문자를 데이터베이스 인코딩에 따른 해당 다중 바이트 문자로 변환합니다.

    예를 들어, ASCII 범위(0x20 ~ 0x7E)에 해당하는 문자는 미리 정의된 다중 바이트 매핑 테이블(UTF8, EUC_JP, EUC_CN 등)에 따라 변환됩니다.

    데이터베이스 인코딩이 해당 매핑 테이블 중 하나에 해당하면, 입력 문자열의 각 문자를 대응하는 다중 바이트 문자열로 치환하고, 그 외의 문자는 그대로 반환합니다.

    파라미터

    파라미터
    설명

    str


    TO_TIMESTAMP_TZ

    Syntax

    TO_TIMESTAMP_TZ
    (
      str  IN text,
      fmt  IN text
    )
    RETURNS timestamp with time zone;

    개요

    입력된 문자열과 포맷 모델을 이용하여 타임스탬프 with time zone (timestamptz) 값으로 변환합니다.

    PostgreSQL 내장 함수to_timestamp 함수를 활용해 문자열을 지정한 형식에 따라 파싱하고, 그 결과를 timestamptz 타입으로 반환합니다.

    Oracle과 달리 타입 안정성을 지키기 위해, 날짜 타입의 변수를 받지 않습니다.

    파라미터

    파라미터
    설명

    BITAND

    Syntax

    BITAND(expr1, expr2)

    개요

    BITAND 연산은 입력과 출력을 bit로 이뤄진 벡터로 처리합니다. 이때 출력은 입력을 비트 단위로 AND 연산한 것의 결과입니다.

    BITAND는 다음과 같은 단계를 걸쳐 계산됩니다.

    1. 인자 A는 SIGN(A) * FLOOR(ABS(A))로 대체됩니다.

    2. 인자 A는 n-bit two's complement 이진 정수 값으로 변환됩니다. 2 비트 값은 비트 단위 AND 연산을 통해 합쳐집니다.

    3. n-bit two's complement 값은 NUMBER으로 다시 변환됩니다.

    파라미터
    설명

    MOD

    Syntax

    MOD(num1, num2);

    개요

    MOD는 num1을 num2로 나눈 나머지를 반환하는 함수입니다. num2이 0이면, num1을 반환합니다.

    이 함수는 num1 또는 num2가 음수면 전통적인 Modulus 함수와는 다른 결과를 반환합니다.

    전통적인 Modulus 함수는 다음과 같습니다.

    num1 - num2 * FLOOR(num1/num2)

    파라미터

    파라미터
    설명

    REMAINDER

    Syntax

    REMAINDER(num1, num2);

    개요

    REMAINDER은 num1을 num2로 나눈 나머지를 반환하는 함수입니다.

    MOD가 FLOOR을 사용하고 REMAINDER은 Bankers' Round 방식의 Round를 사용하는 것을 제외하면 비슷합니다.

    파라미터

    파라미터
    설명

    DUMP

    Syntax

    DUMP(expr[, return_fmt [, start_position [, length ] ] ])

    개요

    DUMP 는 data type code, byte 단위의 길이, expr 의 내부 표현을 가진 TEXT를 반환합니다.

    기본적으로, 반환 값은 character set 정보를 가지고 있지 않습니다.

    expr 의 character set 이름을 찾으려면 return_fmt에 1000을 더하면 됩니다.

    파라미터

    파라미터
    설명
    • 10은 10진법의 결과를 반환합니다.

    • 16은 16진법의 결과를 반환합니다.

    • 17은 컴파일러의 문자 집합에서 출력 가능한 문자로 해석될 수 있는 경우에만 출력 된 각 바이트를 반환합니다. 일부 ASCII 형식의 문자는 ‘?’ 로도 출력 될 수 있습니다. 그렇지 않은 경우 16진법으로 출력됩니다. 모든 NLS 파라미터는 무시됩니다. return_fmt가 17인 DUMP 함수에 대해 어떤 특정 출력 포맷에 의존하면 안됩니다.


    INSTR

    Syntax

    INSTR(string, substring [, position [, occurrence]])

    개요

    INSTR 함수는 string에서 substring을 검색하는 함수입니다. 이 검색 연산은 주어진 문자열에서 substring과 같은 길이의 하위 문자열을 순차적으로 비교하여 일치하는지 확인하는 방식으로 진행됩니다.

    검색은 앞쪽(순방향) 또는 뒤쪽(역방향)으로 수행되며, 각 비교 대상 하위 문자열은 이전 하위 문자열의 첫 번째 문자에서 한 글자씩 이동하며 시작됩니다. 만약 부분 문자열과 일치하는 하위 문자열을 찾으면, 해당 부분 문자열의 첫 번째 문자의 위치를 나타내는 정수를 반환합니다. 일치하는 substring이 없으면 0을 반환합니다.

    파라미터

    파라미터
    설명

    LTRIM

    Syntax

    LTRIM(str [, char_set])

    개요

    LTRIM 은 str의 왼쪽으로부터 char_set 내에 포함된 모든 문자를 제거하는 함수입니다.

    파라미터

    파라미터
    설명

    str

    문자열을 반환하는 임의의 연산식입니다.


    LPAD

    Syntax

    LPAD(expr1, num [, expr2])

    개요

    LPAD 는 expr1의 왼쪽에 expr2를 연속적으로 붙이고, num만큼의 길이를 가진 문자열을 반환하는 함수입니다.

    대부분의 문자 집합에서는 반환 되는 문자열의 문자 수와 길이가 동일하지만, 한글과 같은 멀티 바이트 문자 집합의 경우에는 두 값이 다를 수 있습니다.

    파라미터

    파라미터
    설명

    expr1


    NLSSORT

    Syntax

    NLSSORT(str [, ' nlsparam '])

    개요

    NLSSORT 는 str을 정렬하기 위해 사용되는 문자 바이트를 반환하는 함수입니다.

    파라미터

    파라미터
    설명

    str

    정렬하기 위한 문자열 값입니다. TEXT, CHAR 타입의 데이터가 올 수 있습니다.


    REGEXP_COUNT

    Syntax

    REGEXP_COUNT(str, pattern [, position [, match_param]])

    개요

    REGEXP_COUNT 는 str 내에서 정규 표현식으로 주어진 패턴이 몇 번이나 일치하는지 반환하는 함수입니다.

    파라미터

    파라미터
    설명

    str

    문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.


    REGEXP_LIKE

    Syntax

    REGEXP_COUNT(str, pattern [, match_param])

    개요

    REGEXP_LIKE 는 str과 정규 표현식으로 주어진 패턴을 비교합니다.

    POSIX 정규 표현식 표준을 따릅니다.

    파라미터

    파라미터
    설명

    str


    RPAD

    Syntax

    RPAD(expr1, num [, expr2])

    개요

    RPAD 는 expr1의 오른쪽 expr2를 연속적으로 붙이고, num만큼의 길이를 가진 문자열을 반환하는 함수입니다.

    대부분의 문자 집합에서는 반환되는 문자열의 문자 수와 길이가 동일하지만, 한글과 같은 멀티 바이트 문자 집합의 경우에는 두 값이 다를 수 있습니다.

    파라미터

    파라미터
    설명

    expr1


    RTRIM

    Syntax

    RTRIM(str [, char_set])

    개요

    RTRIM 은 str의 오른쪽으로부터 char_set 내에 포함된 모든 문자를 제거하는 함수입니다.

    파라미터

    파라미터
    설명

    str

    문자열을 반환하는 임의의 연산식입니다.


    SUBSTR

    Syntax

    SUBSTR(str, position [, length])

    개요

    SUBSTR 은 str 내의 position 위치로부터 length 길이의 문자열을 추출하여 반환하는 함수입니다.

    파라미터

    파라미터
    설명

    str

    문자열을 반환하는 임의의 연산식입니다. smallint, integer, bigint, decimal, numeric 타입의 숫자형 데이터가 들어오면 자동으로 문자열로 변환된 후 문자열로써 처리됩니다.


    EXISTSNODE

    Syntax

    EXISTSNODE
    (
      xml IN xml,
      xpath_str IN text,
      namespace_str IN text DEFAULT NULL
    )
    RETURNS integer;

    개요

    EXISTSNODE는 XML 문서에서 질의한 XPath에 해당 노드가 있는지 검사하는 함수입니다. 반환되는 값은 integer 타입이며, 해당 노드가 있으면 1을 없으면 0을 반환합니다.

    xpath_string 인자에 리터럴 NULL이 입력된 경우, 다른 인자들이 유효하더라도 에러를 발생시키지 않고 NULL을 반환합니다.

    파라미터

    파라미터
    설명

    xml

    질의의 대상이 되는 XML 문서로, XML 타입입니다.


    Large Data 처리 가이드

    BLOB/CLOB <- TEXT, BYTEA

    • 1GB 이하

    • TOAST에 의존합니다.

      • PostgreSQL의 각 page영역은 일반적으로 8kb의 고정된 크기로 되어있고 각 tuple이 여러 페이지에 나뉘어 존재할 수 없습니다. (매우 큰 값을 바로 저장할 수 없습니다.)

        이 한계를 극복하기 위해서, 큰 필드 값은 압축되어 저장되거나 여러 개의 물리적 ROWS로 분할되어 저장됩니다.

      • 이 기법을 TOAST (The Oversized-Attribute Storage Technique)라고 하며 PostgreSQL에서 큰 데이터 값을 메모리 내에서 효율적으로 처리하는 데에 사용됩니다.


    • 4TB 이하

    • 특징

      • 파일에 대한 표준 작업과 유사한 읽기/쓰기 API를 사용하여 생성, 수정 및 삭제할 수 있습니다.

      • 대형 개체의 일부를 읽고 업데이트하는 작업을 효율적으로 수행할 수 있는 반면 TOAST 로 처리된 필드의 대부분 작업은 전체 값을 단위로 읽거나 씁니다.


    오라클의 LOB은 4GB까지 지원하는 반면, O2의 LOB은 TEXT, BYTEA 타입에 기반하기 때문에 1GB까지 지원합니다. 따라서 1GB 넘는 데이터 이관 시에는 PostgreSQL의 Large Object를 사용해야 합니다.

    • Large Object 이관에 필요한 API 참고 문서

    LISTAGG


    LISTAGG 함수는 Oracle의 LISTAGG 집계 함수를 PostgreSQL에서 구현한 확장 함수입니다.

    이 함수는 그룹 내의 여러 텍스트 값을 하나의 문자열로 결합하여 반환합니다.

    파라미터
    설명

    WM_CONCAT


    그룹 내의 여러 텍스트 값을 하나의 문자열로 결합하는 집계 함수입니다.

    입력된 텍스트 값을 순차적으로 결합하여 하나의 문자열을 생성합니다.

    내부 동작 과정은 다음과 같습니다:

    • 입력 값이 NULL인 경우 해당 값은 집계에서 제외합니다.

    • 첫 번째 값이 입력되면 새로운 상태(문자열 버퍼)가 생성합니다.

    NVL


    NVL 함수는 두 인자 중 첫 번째 인자가 NULL이 아니면 그 값을 반환하고, 만약 NULL이면 두 번째 인자의 값을 반환합니다.

    동일한 타입의 인자에 대해서만 호출되지만, 서로 다른 타입일 경우 암묵적 형 변환을 수행합니다.

    return 타입은 첫번째 인자의 타입을 따릅니다.

    파라미터
    설명

    TO_DSINTERVAL


    TO_DSINTERVAL은 문자열을 INTERVAL DAY TO SECOND 타입으로 변환하는 함수입니다.

    파라미터
    설명

    NUMTODSINTERVAL


    주어진 숫자 값을 특정 단위(예: 'DAY', 'HOUR', 'MINUTE', 'SECOND')로 해석하여 INTERVAL 타입으로 변환합니다.

    숫자 값은 정수부와 소수부로 나뉘며,

    • 'DAY'인 경우 정수부는 일(day)로, 소수부는 24를 곱해 시간, 분, 초로 변환됩니다.

    • 'HOUR'인 경우 정수부는 시간(hour)로, 소수부는 60을 곱해 분과 초로 변환됩니다.

    TO_DATE


    텍스트(또는 정수형 값을 문자열로 변환한 값)를 Oracle 스타일의 날짜/시간 형식에 따라 TIMESTAMP(0)(밀리세컨드 없는 시분초까지의 날짜+시분초) 값으로 변환합니다.

    포맷 모델(fmt)이 제공되면 해당 형식에 맞게 날짜를 해석하며, 제공되지 않을 경우 기본 형식에 따라 변환됩니다.

    빈 문자열을 입력하면 NULL을 반환합니다.

    Oracle과 달리 타입 안정성을 지키기 위해, 날짜 타입의 변수를 받지 않습니다.

    파라미터
    설명

    REGEXP_INSTR


    REGEXP_INSTR 는 str 내에서 정규 표현식으로 주어진 패턴이 일치하는 위치를 반환하는 함수입니다.

    만약 str과 일치하지 않으면 0을 반환합니다.

    파라미터
    설명

    REGEXP_REPLACE


    REGEXP_COUNT 는 str 내에서 정규 표현식으로 주어진 패턴을 탐색해 다른 문자열로 대치하는 함수입니다.

    파라미터
    설명

    REGEXP_SUBSTR


    REGEXP_COUNT 는 str 내에서 정규 표현식으로 주어진 패턴을 탐색하여 해당 문자열을 반환하는 함수입니다.

    결과의 타입은 str의 타입과 동일합니다.

    파라미터
    설명

    Common Issues

    O2 Extension을 사용하면서 문제가 발생할 경우 수행할 수 있는 조치 방법을 설명합니다.

    아래 방법으로 해결되지 않는 경우 매뉴얼에 기재된 기술서비스센터의 에 문의합니다.

    O2 Extension에서 생성한 커스텀 에러는 모두 ‘O2’로 시작하는 에러 코드가 부여됩니다. 만약 O2 Extension 사용 시 ‘O2’로 시작하는 에러 코드가 발생한 경우 아래와 같이 조치를 취합니다.

    1. 페이지를 참조하여 상황에 맞는 에러인지 확인합니다.

    2. 상황에 맞는 에러인 경우 조치 가이드에 맞게 조치합니다.

    만약 O2 Extension 사용 시 ‘O2’로 시작하지 않는 에러 코드가 발생하더라도 O2 Extension에서 발생시킨 예외일 수 있습니다. 해당 상황에서는 아래와 같이 조치를 취합니다.

  • Chunk로 쪼개고 DB에 row로 저장. B-tree로 chunk index 탐색 가능하게 합니다.

  • 참고

    • https://www.postgresql.org/docs/current/largeobjects.html

  • Large Object

    Migration 가이드

    https://www.postgresql.org/docs/16/largeobjects.html
    1. PostgreSQL Error Codes를 참조하여 발생한 에러 코드가 상황에 맞는 에러인지 확인합니다.

    2. 상황에 맞는 에러인 경우 PostgreSQL Error Codes 조치 가이드에 맞게 조치합니다.

    데이터베이스의 성능 저하는 복합적인 원인을 가질 수 있습니다. O2 Extension 사용 시 성능 저하가 발생하더라도 PostgreSQL 코어나 다른 요소로부터 기인한 문제일 수 있습니다.

    O2 Extension으로부터 기인한 성능 저하 문제인지 확인하는 몇 가지 방법을 제시합니다.

    1. O2Functions의 빌트인 함수를 대체할 수 있는 PostgreSQL 빌트인 함수로 변경하여 테스트 합니다.

      1. 만약 PostgreSQL 빌트인 함수로 대체 후 성능 저하가 해결된다면 O2Functions로부터 기인한 문제이므로 OpenSQL Support 팀에 문의합니다.

      2. 만약 성능 저하가 해결되지 않는다면 PostgreSQL 코어나 다른 요소로부터 기인한 문제일 수 있으므로 병목현상의 원인을 다른 요소에서 찾아야 합니다.

    2. 빌트인 패키지 사용 시 성능 저하가 발생한 경우 타임아웃에 걸리지 않았는지 확인합니다.

      1. DBMS_PIPE, DBMS_ALERT와 같은 패키지는 이벤트가 발생할 때까지 기다릴 타임아웃이 주어집니다. 이 때 타임아웃이 너무 크게 주어진 경우 성능 저하로 보일 수 있으므로 적절한 타임아웃이 주어지도록 조치합니다.

    3. Callgrind와 같은 프로파일링 툴을 사용하여 병목현상의 위치가 O2 Extension인지 확인합니다.

    PostgreSQL은 한 세션이 한 프로세스를 점유합니다. 만약 질의 처리 중 세션이 강제 종료될 경우 세션이 점유하고 있던 프로세스도 같이 강제 종료됩니다. 다른 세션은 영향을 받지 않습니다.

    만약 O2 Extension에서의 버그로 인해 Segmentation Fault와 같은 시그널을 유발하는 에러가 발생할 경우를 대비하여 O2 Extension은 커스텀 시그널 핸들링 로직을 PostgreSQL에 주입했습니다. 커스텀 시그널 핸들링 로직은 시그널로 인해 세션이 강제 종료될 경우 PostgreSQL 로그에 문제가 발생한 위치의 Backtrace 로그를 출력합니다.

    해당 시나리오가 발생할 경우 PostgreSQL 로그에서 Backtrace 로그를 찾아 저장하고 OpenSQL 지원팀에 문의합니다.

    PostgreSQL의 에러 레벨 중 ‘PANIC’ 레벨은 모든 세션을 강제 종료합니다.

    O2 Extension 사용 시 공유 메모리에 대한 잘못된 제어 및 접근을 동반한 버그로 인해 ‘PANIC’ 레벨의 에러가 발생할 수 있습니다. DBMS_PIPE와 DBMS_ALERT는 공유 메모리를 사용하고 있는 Extension으로 모종의 이유로 인해 공유 메모리 제어 시 에러가 발생할 경우 상기 상황이 발생할 가능성이 있습니다.

    해당 상황이 발생한 경우 공유 메모리가 손상되었을 가능성이 있으므로 인스턴스 재기동이 필요합니다. PostgreSQL 로그에서 Backtrace 로그를 찾아 저장하고 OpenSQL 지원팀에 문의합니다.

    이 결과는 Postgresql의 스펙에 따른 한계로 보입니다.

    입력하는 데이터의 크기를 적절한 수치로 줄여보고 해당 방법으로도 해결이 되지 않는다면, PostgreSQL 로그에서 Backtrace 로그를 찾아 저장하고 OpenSQL 지원팀에 문의합니다.

    예외 발생

    에러 코드가 ‘O2’로 시작할 경우

    에러 코드가 ‘O2’로 시작하지 않을 경우

    OpenSQL Support 팀
    TroubleShooting - 에러 코드
    TroubleShooting - 에러 코드

    성능 저하 발생

    싱글 세션 강제종료 발생

    모든 세션 강제종료 발생

    TEXT 타입에 많은 양의 데이터 입력시 Out of memory 발생

    anynonarray 타입입니다; 비교할 첫 번째 값입니다. NULL이 아니어야 합니다.

    expr_array

    variadic anyarray 타입입니다; 추가 인자들을 담은 배열입니다. 배열 안에 NULL이 있으면 전체 결과가 NULL이 됩니다. 배열의 각 원소는 expr1의 타입과 동일해야 합니다.

    예제

    anynonarray 타입입니다; 비교할 첫 번째 값. NULL이 아니어야 합니다.

    expr_array

    VARIADIC anyarray 타입입니다; 추가 인자들을 담은 배열입니다. 배열 안에 NULL이 있으면 전체 결과가 NULL이 됩니다. 배열의 원소들의 타입은 expr1과 동일해야 합니다.

    예제

    boolean 타입입니다; 비교할 불리안 값입니다. NULL이면 결과는 true입니다.

    예제

    value

    검사할 숫자 값(real, double precision, numeric)입니다; NaN이면 replacement 값 반환힙합니다.

    replacement

    value가 NaN 일 때 대신 반환할 값(varchar, real, double precision, numeric)입니다;varchar 일 경우, value의 타입으로 자동 캐스팅 됩니다.

    예제

    date / timestamptz 타입입니다; 비교의 기준이 되는 날짜 (또는 타임스탬프) 값입니다.

    date2 / timestamptz2

    date / timestamptz 타입입니다; date1/timestamptz1과 비교할 대상 날짜 (또는 타임스탬프) 값입니다.

    예제

    timestamp, timestamptz 타입입니다; UTC로 변환할 대상 타임스탬프 값입니다. timestamp의 경우, 세션의 시간대를 기준으로 내부적으로 timestamptz로 변환 후 UTC로 변경됩니다.

    예제

    변환의 단위를 나타내는 값입니다. 'YEAR', 'MONTH' 중 하나의 값만 올 수 있습니다.

    예제

    구간의 값을 반환하는 text 타입이며 다음과 같은 포맷으로 구성됩니다. '[-]P[Y][M]'

    years

    0~177999999 사이의 정수입니다.

    months

    0~11 사이의 정수입니다. ym_iso_format의 경우 0~999999999 사이의 정수가 들어올 수 있습니다.

    구성요소

    예제

    text 타입입니다; 변환할 대상 문자열입니다. ASCII 문자들이 다중 바이트 문자로 치환됩니다.

    예제

    str

    text 타입입니다; 변환할 날짜/시간 문자열입니다.

    fmt

    text 타입입니다; 입력 문자열의 형식을 나타내는 포맷 모델입니다. (예: 'YYYY-MM-DD HH24:MI:SSOF' ) 지원하는 포멧 모델은 PG 공식 문서 를 참조합니다.

    * 날짜/시간 포멧 모델

    예제

    expr1, expr2

    정수 값을 반환하는 임의의 연산식인자 중 하나라도 NULL이면 결과는 NULL인자는 범위 -(2^(n-1)) ~ (2^(n-1) - 1) 내에 있어야 합니다. 인자가 범위를 벗어나면, 결과는 undefined다.* 현재 n은 64입니다.

    파라미터

    예제

    num1, num2

    num1이나 num2는 숫자형 타입이거나 숫자형 타입으로 변환될 수 있는 타입이어야 합니다. num1이나 num2은 두 타입 중 숫자형 우선순위에 따라 더 높은 순위의 타입으로 변환되고, 또한 그 타입으로 반환됩니다

    예제

    num1, num2

    num1이나 num2는 숫자형 타입이거나 숫자형 타입으로 변환될 수 있는 타입이어야 합니다. num1이나 num2은 두 타입 중 숫자형 우선순위에 따라 더 높은 순위의 타입으로 변환되고, 또한 그 타입으로 반환됩니다

    예제

    expr

    문자열로 올 수 있는 임의의 식입니다.

    expr이 NULL인 경우 NULL을 반환합니다.

    return_fmt

    return_fmt은 반환 값의 타입을 지정하며 다음 값 중 하나를 가질 수 있습니다.

    • 8은 8진법의 결과를 반환합니다.

    start_position

    시작 위치를 나타냅니다.

    length

    표시할 길이를 지정합니다.

    예제

    string, substring

    모두 문자열을 반환하는 임의의 연산식입니다. 만약 문자열 str 내에서 문자열 substr 을 발견하지 못하면 0을 반환합니다. 문자열의 위치 값은 1부터 시작됩니다.

    position

    0이 아닌 정수 값을 반환하는 임의의 연산식입니다. (기본값: 1) position이 주어지면 문자열 str의 position 위치에서부터 탐색을 시작합니다. 만약 position이 음수이면 문자열 str의 뒤에서부터 탐색을 시작합니다.

    occurrence

    0이 아닌 정수 값을 반환하는 임의의 연산식입니다. (기본값: 1) occurrence가 주어지면 탐색 문자열 내에서 occurrence번째에 나타나는 문자열 substr의 위치를 반환합니다. occurrence는 양의 정수이어야 합니다.

    예제

    char_set

    문자열을 반환하는 임의의 연산식입니다. 만약 파라미터 char_set의 값이 없으면, 기본값으로 공백 문자 하나를 갖습니다.

    예제

    문자열 또는 CLOB 타입, BLOB 타입을 반환하는 임의의 연산식입니다. expr1의 길이가 num 보다 큰 경우 expr1에서 왼쪽부터 num만큼의 문자열을 반환합니다.

    expr2

    문자열 또는 CLOB 타입, BLOB 타입을 반환하는 임의의 연산식입니다. expr2가 명시되지 않은 경우 공백 문자가 사용됩니다.

    num

    num은 수치 값을 반환하는 임의의 연산식입니다. num은 터미널에 출력 되는 길이를 의미합니다.

    예제

    nls_param

    str를 정렬하기 위해 사용할 문자 집합을 정의하는 파라미터입니다. TEXT, CHAR 타입의 데이터가 올 수 있습니다. 'NLS_SORT=sort'와 같은 형식으로 정의할 수 있습니다. 정의하지 않으면 세션에 정의 된 값을 사용합니다.

    예제

    pattern

    정규 표현식으로 작성된 문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    position

    숫자 값을 반환하는 임의의 연산식으로 패턴 검사를 시작할 위치를 지정합니다.

    match_param

    문자열을 반환하는 임의의 연산식으로 패턴을 검사할 방법을 설정합니다. 다음과 같은 값을 사용할 수 있고, 여러 개를 동시에 사용할 수 있습니다.

    • i : 대소문자를 구분하지 않습니다.

    • c : 대소문자를 구분합니다.

    • n : 점(.)이 줄바꿈 문자도 포함합니다.

    • m : 입력문자열이 한 줄 이상입니다.

    • x : pattern의 공백문자를 무시합니다.

    예제

    문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    pattern

    정규 표현식으로 작성된 문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    match_param

    문자열을 반환하는 임의의 연산식으로 패턴을 검사할 방법을 설정합니다. 다음과 같은 값을 사용할 수 있고, 여러 개를 동시에 사용할 수 있습니다.

    • i : 대소문자를 구분하지 않습니다.

    • c : 대소문자를 구분합니다.

    • n : 점(.)이 줄바꿈 문자도 포함합니다.

    • m : 입력문자열이 한 줄 이상입니다.

    • x : pattern의 공백문자를 무시합니다.

    예제

    문자열 또는 CLOB 타입, BLOB 타입을 반환하는 임의의 연산식입니다. expr1의 길이가 num 보다 큰 경우 expr1에서 왼쪽부터 num만큼의 문자열을 반환합니다.

    expr2

    문자열 또는 CLOB 타입, BLOB 타입을 반환하는 임의의 연산식입니다. expr2가 명시되지 않은 경우 공백 문자가 사용됩니다.

    num

    num은 수치 값을 반환하는 임의의 연산식입니다. num은 터미널에 출력되는 길이를 의미합니다.

    예제

    char_set

    문자열을 반환하는 임의의 연산식입니다. 만약 파라미터 char_set의 값이 없으면, 기본값으로 공백 문자 하나를 갖습니다.

    예제

    position

    정수 값을 반환하는 임의의 연산식입니다. position이 0보다 작은 경우 str의 뒤에서부터 추출됩니다.

    length

    정수 값은 반환하는 임의의 연산식입니다. 만약 length가 지정되지 않으면 str의 position 위치에서부터 마지막까지 문자열을 추출하며, length가 1보다 작으면 NULL을 반환합니다.

    예제

    xpath_str

    질의할 XPath 형태의 문자열 값입니다.

    namespace_str

    XML 문서에서 네임스페이스가 필요할 때 사용하는 옵션입니다.

    예제

    text 타입입니다; 각 텍스트 값 사이에 삽입할 구분자입니다. 구분자 없이 호출할 경우 내부적으로 구분자 없이 처리합니다.


    expression

    text 타입입니다; 집계할 값으로, NULL인 경우 해당 값은 무시합니다.

    Syntax

    개요

    파라미터

    delimiter

    예제

    이후 값이 입력되면 기존 문자열 뒤에 기본 구분자(콤마)가 추된 후, 해당 값이 이어서 결합합니다.

  • 집계가 완료되면 누적된 문자열이 최종 결과로 반환합니다.

  • 파라미터
    설명

    expr

    text 타입입니다; 집계할 텍스트 값입니다. NULL 값은 집계 시 제외됩니다.


    Syntax

    개요

    파라미터

    예제

    expr2

    첫 번째 인자가 NULL일 경우 반환될 값입니다; 두 인자의 타입이 다를 경우, 적절한 형 변환(예: 텍스트에서 숫자 또는 날짜로의 변환)이 시도될 수 있습니다.


    expr1

    Syntax

    개요

    파라미터

    평가할 첫 번째입니다. 이 값이 NULL이 아니면 그대로 반환됩니다.

    예제

    'MINUTE'인 경우 정수부는 분(minute)로, 소수부는 60을 곱해 초(second)로 변환됩니다.

  • 'SECOND'인 경우 입력된 숫자 전체가 초(second)로 해석됩니다.

  • 만약 잘못된 단위가 전달되면 오류를 발생시킵니다.

    파라미터
    설명

    number

    double precision 타입입니다; 변환할 시간 값입니다. 소수부가 있을 경우 하위 단위(시간, 분, 초)로 변환됩니다.

    unit

    text 타입입니다;숫자 값의 단위를 지정합니다. 유효한 단위는 'DAY', 'HOUR', 'MINUTE', 'SECOND'입니다. 예를 들어, 'DAY'를 지정하면 소수부가 시간, 분, 초로 차례로 변환됩니다.


    Syntax

    개요

    파라미터

    예제

    # 테스트 1
    SELECT GREATEST(5, 3, 9);
    
     greatest 
    ----------
            9
    (1 row)
    
    # 테스트 2
    SELECT GREATEST('apple'::text, 'banana', 'cherry'); -- 결과: cherry (문자열 사전순 비교)
    
     greatest 
    ----------
     cherry
    (1 row)
    
    # 테스트 3
    SELECT GREATEST(10, NULL, 7); -- 결과 NULL
    
     greatest 
    ----------
             
    # 테스트 1
    SELECT LEAST(5, 3, 9);
    
     least 
    -------
         3
    (1 row)
    
    
    # 테스트 2
    SELECT LEAST('apple'::text, 'banana', 'cherry'); -- 결과: apple (문자열 사전순 비교)
    
     least 
    -------
     apple
    (1 row)
    
    # 테스트 3
    SELECT LEAST(10, NULL, 7); -- 결과: NULL
    
     least 
    -------
          
    (1 row)
    # 테스트 1
    SELECT LNNVL(true);  
    
     lnnvl 
    -------
     f
    (1 row)
    
    # 테스트 2
    SELECT LNNVL(false);  
    
     lnnvl 
    -------
     t
    (1 row)
    
    # 테스트 3
    SELECT LNNVL(NULL);  
    
     lnnvl 
    -------
     t
    (1 row)
    # 테스트 1
    SELECT NANVL(3.14, 0.0); -- 결과: 3.14 (3.14가 NaN이 아니므로 원래 값 반환)
    
     nanvl 
    -------
      3.14
    (1 row)
    
    # 테스트 2
    SELECT NANVL('NaN'::float4, 0.0); -- 결과: 0.0 (첫 번째 값이 NaN이어서 대체값 0.0 반환)
    
     nanvl 
    -------
         0
    (1 row)
    # 테스트 1
    SELECT MONTHS_BETWEEN('2023-05-15'::date, '2022-01-10'::date);
    
      months_between  
    ------------------
     16.1612903225806
    (1 row)
    
    # 테스트 2
    SELECT MONTHS_BETWEEN('2023-05-15 12:00:00+09'::timestamptz, '2022-01-10 08:30:00+09'::timestamptz);
    
      months_between  
    ------------------
     16.1659946143627
    # 테스트 1
    SELECT SYS_EXTRACT_UTC('2023-06-01 12:34:56+07'::timestamptz);
    
       sys_extract_utc   
    ---------------------
     2023-06-01 05:34:56
    (1 row)
    
    # 테스트 2
    -- 세션 시간대 '+9:00' 기준으로 timestamptz 변환 후 UTC로 변경
    SELECT SYS_EXTRACT_UTC('2023-06-01 12:34:56'::timestamp);
    
       sys_extract_utc   
    ---------------------
     2023-06-01 03:34:56
    (1 row)
    SELECT NUMTOYMINTERVAL (10, 'YEAR');
     numtoyminterval 
    -----------------
     10 years
    (1개 행)
    
    SELECT NUMTOYMINTERVAL (10, 'month');
     numtoyminterval 
    -----------------
     10 mons
    (1개 행)
    
    SELECT NUMTOYMINTERVAL (0, 'month');
     numtoyminterval 
    -----------------
     00:00:00
    (1개 행)
    SELECT DATE '2008-03-20' + TO_YMINTERVAL('2-7') AFTER;
             after          
    ------------------------
     2010-10-20 09:00:00+09
    (1개 행)
    
    SELECT DATE '2008-03-20' + TO_YMINTERVAL('P2Y7M') AFTER;
             after          
    ------------------------
     2010-10-20 09:00:00+09
    (1개 행)
    SELECT TO_MULTI_BYTE('Hello, World!');
    
           to_multi_byte        
    ----------------------------
     Hello, World!
    (1 row)
    SELECT TO_TIMESTAMP_TZ('2023-06-01 12:34:56+09', 'YYYY-MM-DD HH24:MI:SSOF');
    
        to_timestamp_tz     
    ------------------------
     2023-06-01 12:34:56+09
    (1 row)
    SELECT BITAND(6,3);
    
     bitand 
    --------
          2
    SELECT MOD(-11, 4), MOD(11, -4);
     mod | mod 
    -----+-----
      -3 |   3
    SELECT REMAINDER(3,2);
     remainder 
    -----------
            -1
    SELECT DUMP('abc'::TEXT, 1016);
                       dump                   
    ------------------------------------------
     Typ=25 Len=3 CharacterSet=UTF8: 61,62,63
    (1 row)
    SELECT INSTR('ABCDEABCDEABCDE', 'CD');
     instr 
    -------
         3
    SELECT LTRIM('ABCDEFGHIJKLMNOP', 'ABCDEF');
       ltrim    
    ------------
     GHIJKLMNOP
     (1 row)
     SELECT LPAD('LPAD', 10, '-=');
        lpad    
    ------------
     -=-=-=LPAD
    (1 row)
    SELECT NAME FROM T ORDER BY NLSSORT(NAME);
     name 
    ------
     BAR
     FOO
    (2 rows)
    SELECT REGEXP_COUNT('abcabcabc','abc', 2);
     regexp_count 
    --------------
                2
    (1 row)
    SELECT REGEXP_LIKE('Hello World', 'world', 'i');
     regexp_like 
    -------------
     t
    (1 row)
     SELECT RPAD('RPAD', 10, '-=');
        rpad    
    ------------
     RPAD-=-=-=
    (1 row)
    SELECT RTRIM('ABCDEFGHIJKLMNOP', 'LMNOP');
        rtrim    
    -------------
     ABCDEFGHIJK
     (1 row)
    SELECT SUBSTR('ABCDEFG', 3, 2), SUBSTR('ABCDEFG', -3, 2);
     substr | substr 
    --------+--------
     CD     | EF
    select existsnode('<root><a>1</a><b>2</b></root>'::xml, '/root/a');
     existsnode 
    ------------
              1
    (1개 행)
    
    select existsnode('<root><a>1</a><b>2</b></root>'::xml, null);
     existsnode 
    ------------
               
    (1개 행)
    LISTAGG( 
        [ ALL | DISTINCT ] 
        expression 
        [, delimite] 
    ) 
    [OVER ( [query_partition_clause] );
    RETURNS text;
    
    query_partition_caluse : 
    PARTITION BY
      { expr[, expr ]...
      | ( expr[, expr ]... )
      }
    # 테스트 테이블
    create table employees ( first_name varchar, last_name varchar );
    
    INSERT INTO employees (first_name, last_name) VALUES
    ('John', 'Doe'),
    ('Jane', 'Smith'),
    ('Michael', 'Johnson'),
    ('Emily', 'Davis'),
    ('David', 'Wilson'),
    ('Sarah', 'Brown'),
    ('James', 'Taylor'),
    ('Jessica', 'Martinez'),
    ('Daniel', 'Anderson'),
    ('Laura', 'Thomas');
    
    
    # 테스트 1
    select listagg(last_name, ',') from employees ;
    
                                   listagg                                
    ----------------------------------------------------------------------
     Doe,Smith,Johnson,Davis,Wilson,Brown,Taylor,Martinez,Anderson,Thomas
    (1 row)
    
    # 테스트 2
    select listagg(last_name) from employees ;
                               listagg                           
    -------------------------------------------------------------
     DoeSmithJohnsonDavisWilsonBrownTaylorMartinezAndersonThomas
    (1 row)
    WM_CONCAT
    (
      expr  IN text
    )
    RETURNS text;
    # 테스트 테이블
    create table employees ( first_name varchar, last_name varchar );
    
    INSERT INTO employees (first_name, last_name) VALUES
    ('John', 'Doe'),
    ('Jane', 'Smith'),
    ('Michael', 'Johnson'),
    ('Emily', 'Davis'),
    ('David', 'Wilson'),
    ('Sarah', 'Brown'),
    ('James', 'Taylor'),
    ('Jessica', 'Martinez'),
    ('Daniel', 'Anderson'),
    ('Laura', 'Thomas');
    
    
    # 테스트 1
    select wm_concat(last_name) from employees ;
    
                                  wm_concat                               
    ----------------------------------------------------------------------
     Doe,Smith,Johnson,Davis,Wilson,Brown,Taylor,Martinez,Anderson,Thomas
    (1 row)
    
    # 테스트 2
    select wm_concat(first_name) from employees ;
    
                               wm_concat                            
    ----------------------------------------------------------------
     John,Jane,Michael,Emily,David,Sarah,James,Jessica,Daniel,Laura
    (1 row)
    NVL(expr1, expr2)
    # 테스트 데이터
    create table employees (first_name varchar, last_name varchar, salary integer, hire_date timestamptz);
    
    INSERT INTO employees (first_name, last_name, salary, hire_date) VALUES
    ('John', 'Doe', NULL, '2020-03-15 09:00:00'),
    (NULL, 'Smith', 62000, '2019-07-22 10:30:00'),
    ('Michael', 'Johnson', 72000, '2018-11-10 08:45:00'),
    ('Emily', 'Davis', 48000, '2021-05-01 12:00:00'),
    ('David', 'Wilson', 53000, '2017-09-17 14:20:00'),
    (NULL, 'Brown', NULL, '2016-12-05 09:15:00'),
    ('James', 'Taylor', NULL, '2015-06-30 16:45:00'),
    ('Jessica', 'Martinez', 68000, '2022-01-25 11:10:00'),
    (NULL, 'Anderson', 58000, '2020-10-05 13:35:00'),
    ('Laura', 'Thomas', 49500, '2023-08-12 08:00:00');
    
    
    # 테스트 1
    # salary 값이 NULL이면 0 반환; first_name 값이 NULL이면 last_name 반환;
    select NVL(salary,0), NVL(first_name, last_name) from employees ;
    
      nvl  |   nvl   
    -------+---------
     55000 | John
     62000 | Jane
     72000 | Michael
     48000 | Emily
     53000 | David
     60000 | Sarah
     75000 | James
     68000 | Jessica
     58000 | Daniel
     49500 | Laura
    (10 rows)
    
    NUMTODSINTERVAL
    (
      number  IN double precision,
      unit    IN text
    )
    RETURNS interval;
    -- 1.5 DAY는 1일 12시간으로 변환됨
    SELECT NUMTODSINTERVAL(1.5, 'DAY');
    
     numtodsinterval 
    -----------------
     1 day 12:00:00
    (1 row)
    
    -- 2.75 HOUR는 2시간 45분으로 변환됨
    SELECT NUMTODSINTERVAL(2.75, 'HOUR');
    
     numtodsinterval 
    -----------------
     02:45:00
    (1 row)
    
    -- 30 MINUTE는 30분 0초로 변환됨
    SELECT NUMTODSINTERVAL(30, 'MINUTE');
    
     numtodsinterval 
    -----------------
     00:30:00
    (1 row)
    
    -- 90 SECOND는 90초 그대로 반환됨
    SELECT NUMTODSINTERVAL(90, 'SECOND');
    
     numtodsinterval 
    -----------------
     00:01:30
    (1 row)
    구성요소
    설명

    days

    0~999999999 사이의 정수입니다.

    hours

    0~23 사이의 정수입니다.

    minutes, seconds

    0~59 사이의 정수입니다.


    TO_DSINTERVAL
    (
      sql_format IN text -- format: '[+|-]days hours:minutes:seconds[.frac_secs]'
    )
    RETURNS interval;
    
    TO_DSINTERVAL
    (
      ds_iso_format In text  -- format: '[-]P[<days>D][T[<hours>H][<minutes>M][<seconds>[.frac_secs]S]]'
    )
    RETURNS interval;

    sql_format

    구간 형태의 문자열 값을 반환하는 임의의 연산식입니다. 다음과 같은 포맷으로 구성됩니다. '[+|-]days hours:minutes:seconds[.frac_secs]'

    ds_iso_format

    Syntax

    개요

    파라미터

    구간 형태의 문자열 값을 반환하는 임의의 연산식입니다. 다음과 같은 포맷으로 구성됩니다. '[-]P[D][T[H][M][[.frac_secs]S]]'

    SELECT DATE '2008-03-20' - TO_DSINTERVAL('50 00:00:00') before;
             before         
    ------------------------
     2008-01-30 09:00:00+09
    (1개 행)
    
    SELECT DATE '2008-03-20' - TO_DSINTERVAL('P50DT0H0M0S') before;
             before         
    ------------------------
     2008-01-30 09:00:00+09
    (1개 행)

    구성요소

    예제

    str

    text 타입입니다; 날짜 및 시간 정보를 포함한 문자열입니다. 빈 문자열이면 NULL로 처리됩니다.

    num

    integer 타입입니다; 정수형 값으로, 내부적으로 문자열로 변환되어 날짜로 해석됩니다.

    fmt

    text 타입입니다; 입력 문자열의 날짜/시간 형식을 지정하는 포맷 모델입니다.

    예를 들어, 'YYYY-MM-DD HH24:MI:SS'와 같이 사용합니다.

    지원하는 포멧 모델은 를 참조합니다.

    *


    TO_DATE
    (
      str  IN text
    )
    RETURNS timestamp;
    
    TO_DATE
    (
      str  IN text,
      fmt  IN text
    )
    RETURNS timestamp;
    
    TO_DATE
    (
      num  IN integer,
      fmt  IN text
    )
    RETURNS timestamp;

    Syntax

    개요

    파라미터

    -- 텍스트와 포맷 모델을 사용하여 날짜/시간 문자열을 TIMESTAMP로 변환
    SELECT TO_DATE('2023-06-01 12:34:56', 'YYYY-MM-DD HH24:MI:SS');
    
           to_date       
    ---------------------
     2023-06-01 12:34:56
    (1 row)
    
    -- 텍스트만 전달한 경우 기본 변환 형식을 사용 (빈 문자열은 NULL 반환)
    SELECT TO_DATE('2023-06-01 12:34:56');
    
           to_date       
    ---------------------
     2023-06-01 12:34:56
    (1 row)
    
    -- 정수형 값을 문자열로 해석하여 TIMESTAMP로 변환
    SELECT TO_DATE(20230601, 'YYYYMMDD');
    
           to_date       
    ---------------------
     2023-06-01 00:00:00
    (1 row)

    예제

    pattern

    정규 표현식으로 작성된 문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    position

    숫자 값을 반환하는 임의의 연산식으로 패턴 검사를 시작할 위치를 지정합니다.

    occurrence

    숫자값을 반환하는 임의의 연산식으로 패턴을 몇 번 검사할지를 지정합니다.

    return_option

    숫자값을 반환하는 임의의 연산식입니다.

    • 0 : 패턴과 일치하는 문자열의 처음 위치를 반환합니다.

    • 1 : 패턴과 일치하는 문자열 다음 위치를 반환합니다.

    match_param

    문자열을 반환하는 임의의 연산식으로 패턴을 검사할 방법을 설정합니다. 다음과 같은 값을 사용할 수 있고, 여러 개를 동시에 사용할 수 있습니다.

    • i : 대소문자를 구분하지 않습니다.

    • c : 대소문자를 구분합니다.

    sub_expr

    숫자값을 반환하는 임의의 연산식으로 0부터 9까지 사용할 수 있습니다. sub_expr은 pattern에서 괄호로 감싸진 각 그룹들을 왼쪽부터 숫자로 지정합니다.


    REGEXP_COUNT(str, pattern [, position [, occurrence [, return_option [, match_param [, sub_expr}]]]])

    str

    Syntax

    개요

    파라미터

    문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    SELECT REGEXP_INSTR('abcabcabc','abc', 2);
     regexp_instr 
    --------------
                4
    (1 row)

    예제

    정규 표현식으로 작성된 문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    replace_str

    문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    position

    숫자 값을 반환하는 임의의 연산식으로 패턴 검사를 시작할 위치를 지정합니다.

    occurrence

    숫자값을 반환하는 임의의 연산식으로 패턴을 몇 번 검사할지를 지정합니다.

    match_param

    문자열을 반환하는 임의의 연산식으로 패턴을 검사할 방법을 설정합니다. 다음과 같은 값을 사용할 수 있고, 여러 개를 동시에 사용할 수 있습니다.

    • i : 대소문자를 구분하지 않습니다.

    • c : 대소문자를 구분합니다.


    REGEXP_LIKE(str, pattern [, replace_str [, position [, occurrence [, match_param]]]])

    str

    문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    Syntax

    개요

    파라미터

    pattern

    SELECT REGEXP_REPLACE('aaaaaaa','([[:alpha:]])', 'x');
     regexp_replace 
    ----------------
     xxxxxxx
    (1 row)

    예제

    pattern

    정규 표현식으로 작성된 문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    position

    숫자 값을 반환하는 임의의 연산식으로 패턴 검사를 시작할 위치를 지정합니다.

    occurrence

    숫자 값을 반환하는 임의의 연산식으로 패턴 검사를 시작할 위치를 지정합니다.

    match_param

    문자열을 반환하는 임의의 연산식으로 패턴을 검사할 방법을 설정합니다. 다음과 같은 값을 사용할 수 있고, 여러 개를 동시에 사용할 수 있습니다.

    • i : 대소문자를 구분하지 않습니다.

    • c : 대소문자를 구분합니다.

    subexp

    숫자 값을 반환하는 임의의 연산식으로 0부터 9까지 사용할 수 있습니다. subexp은 pattern에서 괄호로 감싸진 각 그룹들을 왼쪽부터 숫자로 지정합니다.


    REGEXP_SUBSTR(str, pattern [, position [, occurrence [, match_param [, subexp]]]])

    str

    Syntax

    개요

    파라미터

    문자열을 반환하는 임의의 연산식입니다. TEXT, CHAR의 타입이 올 수 있습니다.

    SELECT REGEXP_COUNT('abcabcabc','abc', 2);
     regexp_count 
    --------------
                2
    (1 row)

    예제

    NVL2

    Syntax

    NVL2(expr1, expr2, expr3)

    개요

    NVL2 함수는 첫 번째 인자가 NULL이 아닐 경우 두 번째 인자의 값을 반환하고, 만약 첫 번째 인자가 NULL이면 세 번째 인자의 값을 반환합니다.

    두 번째와 세 번째 인자는 동일한 범주의 타입이어야 하며, 필요한 경우 암묵적 형 변환을 수행하는 별도 변형 함수가 존재합니다.

    파라미터

    파라미터
    설명

    expr1

    평가할 첫 번째 값입니다. 이 값이 NULL이 아닐 경우 두 번째 인자를 반환하는 기준이 됩니다.


    ADD_MONTHS

    Syntax

    ADD_MONTHS
    (
      date    IN,
      number  IN 
    )
    RETURNS date;
    
    ADD_MONTHS
    (
      TIMESTAMP WITH TIME ZONE  IN,
      number                    IN
    )
    RETURNS TIMESTAMP WITH TIME ZONE;
    
    ADD_MONTHS
    (
      TIMESTAMP WITHOUT TIME ZONE  IN,
      number                    IN
    )
    RETURNS TIMESTAMP WITHOUT TIME ZONE;

    개요

    ADD_MONTHS 함수는 주어진 날짜나 타임스탬프에 지정한 개월 수를 더한 새로운 날짜나 타임스탬프를 반환합니다.

    내부적으로 입력 날짜를 연, 월, 일로 분해한 후, 전체 개월 수를 더해 새 연도와 월을 계산합니다.

    특히, 입력 날짜가 해당 월의 마지막 날인 경우 새 달의 마지막 날로 조정됩니다.

    첫 번째 인자가 timestamptz 인 경우, 날짜 계산 후 기존의 시간 정보를 그대로 유지합니다.

    파라미터
    설명

    NEXT_DAY

    Syntax

    NEXT_DAY
    (
      value          IN date,
      weekday        IN text
    )
    RETURNS date;
    
    NEXT_DAY
    (
      value          IN date,
      weekday_index  IN integer
    )
    RETURNS date;
    
    NEXT_DAY
    (
      value          IN TIMESTAMP WITH TIME ZONE,
      weekday        IN text
    )
    RETURNS TIMESTAMP without time zone;
    
    NEXT_DAY
    (
      value          IN TIMESTAMP WITH TIME ZONE,
      weekday_index  IN integer
    )
    RETURNS TIMESTAMP without time zone;

    개요

    주어진 날짜 이후에 나오는 첫 번째 특정 요일의 날짜를 반환합니다.

    문자열 형태의 요일(예: 'Monday', 'Tue' 등) 또는 요일 인덱스(1부터 7, 1은 일요일)를 인자로 받아 처리합니다.

    TIMESTAMP WITH TIME ZONE 타입의 경우, 날짜 계산 후 원래 시간 부분을 그대로 유지하여 타임스탬프 값을 반환합니다.

    파라미터

    파라미터
    설명

    value


    ROUND

    Syntax

    ROUND
    (
      expr  IN date [, fmt   IN text]
    )
    RETURN date;
    
    ROUND
    (
      expr  IN timestamp without time zone [, fmt   IN text]
    )
    RETURN timestamp without time zone;
    
    ROUND
    (
      expr  IN timestamp with time zone [, fmt   IN text]
    )
    RETURN timestamp with time zone;

    개요

    ROUND 함수는 날짜나 타임스탬프 값을 주어진 포맷 모델에 따라 반올림합니다.

    즉, 지정한 단위(예: 연, 월, 분 등)에 맞춰 날짜나 시간의 값을 조정해서 반환합니다.

    포맷 문자열(fmt)을 통해 반올림 단위를 지정할 수 있으며, 값이 NULL이면 그대로 NULL을 반환합니다.

    타임스탬프 버전의 경우, 시간 부분을 반올림한 후 초는 0으로 설정됩니다.

    파라미터

    파라미터
    설명

    TRUNC

    Syntax

    TRUNC
    (
      expr  IN date [, fmt   IN text]
    )
    RETURNS date;
    
    TRUNC
    (
      expr  IN timestamp without time zone [, fmt   IN text]
    )
    RETURNS timestamp without time zone;
    
    TRUNC
    (
      expr  IN timestamp with time zone [, fmt   IN text]
    )
    RETURNS timestamp with time zone;

    개요

    TRUNC 함수는 날짜나 타임스탬프 값에서 하위 단위를 잘라내고, 지정한 포맷 모델에 맞춰 값을 자른(버림) 결과를 반환합니다.

    즉, 값의 시간 또는 날짜 부분에서 소수점 이하(또는 세부 단위)를 제거하여, 원하는 단위(예: 연, 월, 일 등)까지만 남깁니다.

    만약 포맷 문자열(fmt)이 제공되지 않으면, 기본적으로 'DDD' (일 단위)로 처리됩니다.

    타임스탬프 버전의 경우, 내부의 시간 정보를 함께 처리하여 시간 단위 이하를 잘라내며, 초 이하 정보는 0으로 설정됩다.

    파라미터

    파라미터
    설명

    TO_CHAR

    Syntax

    TO_CHAR
    (
      value IN { smallint | int | bigint | real | double precision | numeric | text | timestamp | timestamptz }
      [, fmt IN text]
    )
    RETURNS text

    개요

    숫자, 날짜, 타임스탬프 또는 문자열 값을 지정한 포맷 모델(fmt)에 따라 문자열로 변환됩니다.

    포맷 모델이 제공되지 않으면 각 데이터 타입의 기본 출력 형식에 따라 문자열로 변환됩니다.

    숫자형의 경우 정수, 부동소수점, 그리고 numeric 값을 포맷에 따라 변환하며,

    날짜와 타임스탬프는 지정된 형식(예: 'YYYY-MM-DD', 'HH24:MI:SS')으로 변환됩니다.

    파라미터

    파라미터
    설명

    TO_NUMBER

    Syntax

    TO_NUMBER
    (
      value  IN { text | smallint | int | bigint | double precision | numeric }
    )
    RETURNS numeric;
    
    TO_NUMBER
    (
      value  IN numeric,
      fmt    IN numeric
    )
    RETURNS numeric;

    개요

    입력된 문자열 또는 숫자형 값을 Oracle 스타일의 숫자(numeric)로 변환합니다.

    텍스트로 입력된 경우, 로케일 설정에 따라 소수점 및 천 단위 구분 문자를 조정한 후 숫자 형식 문자열을 숫자로 변환합니다.

    또한, smallint, int, bigint, double precision 타입 값은 각 타입 전용 내부 로직을 통해 numeric 타입으로 변환됩니다.

    numeric 타입의 입력은 그대로 반환 되며, 포맷 모델(fmt)이 제공되면 PG 기본 내장 함수(pg_catalog.to_number) 함수를 이용해 추가 변환 형식을 적용할 수 있습니다.

    파라미터
    설명

    UNISTR

    Syntax

    UNISTR
    (
      str  IN text
    )
    RETURNS text;

    개요

    입력된 텍스트 내의 Unicode escape 시퀀스를 실제 Unicode 문자로 변환하여 반환합니다.

    지원하는 escape 형식은 다음과 같습니다.

    • \XXXX : 4자리 16진수 형식입니다

    • \uXXXX : 4자리 16진수 형식입니다 (앞에 'u' 접두사가 붙음)

    • \+XXXXXX : '+' 기호 뒤에 6자리 16진수 형식입니다

    • \UXXXXXXXX : 'U' 기호 뒤에 8자리 16진수 형식입니다

    함수는 surrogate pair 처리를 통해 올바른 Unicode 코드 포인트로 변환하며, 잘못된 surrogate pair가 감지되면 오류를 발생시킵니다.

    'U+0000' 는 유효하지 않은 유니코드 입니다. 따라서 다음과 같은 예시는 오류를 발생시킵니다. \0000 , \u0000 , \+000000 , \U00000000

    파라미터
    설명

    SYS_CONTEXT

    Syntax

    SYS_CONTEXT(namespace TEXT, parameter TEXT, length NUMERIC DEFAULT NULL)

    개요

    SYS_CONTEXT 함수는 현재 세션의 컨텍스트 네임스페이스와 연결된 파라미터의 값을 반환합니다.

    파라미터

    파라미터
    설명

    namespace

    임의의 이름이 지정된 컨텍스트입니다. 현재는 USERENV만 지원합니다.

    parameter

    userenv 네임스페이스에 대해 다음과 같은 파라미터를 지원합니다.

    파라미터
    설명

    O2 Extension 설치

    O2는 PostgreSQL 환경에서 오라클이 지원하는 함수/패키지/타입들과 호환되는 인터페이스를 제공하여 사용자들의 편의를 향상시키는 PostgreSQL Extension 입니다.

    OpenSQL에서 지원하는 운영체제/하드웨어 사양과 동일합니다.

    O2 Extension에서는 제품 설치를 위한 방법을 다음의 2가지 설치 형태로 제공하고 있습니다.

    • make 방식으로 설치

    • shell 방식으로 설치

    타입(Type) 참조 안내서

    데이터 타입에 대한 참조 안내서입니다.

    O2types extension 설치 후 신규 데이터 타입들이 추가되며, 아래의 2가지 형식으로 사용하여야 합니다.

    스키마(기본 oracle)의 이름을 타입 앞에 추가하여 사용합니다.

    스키마(기본 oracle)를 가장 높은 우선순위 search_path로 설정한 경우, 스키마를 생략하고 사용할 수 있습니다.

    아래 사양들은 스키마를 생략한 형태로 기술합니다.

    DATE 타입은 특정 날짜와 초 단위까지의 시간을 표현하는 데이터 타입입니다. TIMESTAMP(0)과 표현 범위가 동일합니다.

    DATE 타입은 다음과 같은 특징이 있습니다.

    MEDIAN

    MEDIAN 집계 함수는 그룹 내의 값들 중 중앙값(median)을 계산하여 반환하는 통계 함수입니다.

    Oracle의 MEDIAN 함수를 참고하여 PostgreSQL에서 구현했습니다.

    정수형, 실수형, 날짜/시간 타입 데이터 타입에 대해 사용 가능합니다.

    내부적으로, MEDIAN 함수는 두 단계로 동작합니다.

    집계 단계

    • 그룹 내의 값들을 타입에 맞는 벡터(리스트 자료구조)에 수집하는 단계입니다.

    FAQ

    A. PostgreSQL은 Extension 설치를 간편하게 할 수 있도록 설계되어 있습니다. O2 Extension도 마찬가지로 손쉽게 설치가 가능합니다. 자세한 내용은 를 참조합니다.

    A. PostgreSQL은 동적 링크를 활용하여 Extension을 간단한 SQL 구문으로 활성화하도록 설계되어 있습니다. O2 Extension도 마찬가지로 간단한 SQL 구문을 사용하여 활성화할 수 있습니다. 자세한 내용은 를 참조합니다.

    A. O2 Extension의 기능은 대부분 PostgreSQL 14 이상 버전을 지원합니다. 하지만 일부 기능은 PostgreSQL 15 이상을, 또 다른 일부 기능은 PostgreSQL 16 이상의 버전을 요구합니다.

    사용 중인 PostgreSQL 버전이 특정 기능의 최소 요구 사항을 충족하지 못할 경우, 설치 시 해당 기능은 자동으로 제외됩니다. 기능별 최소 지원 버전은 아래와 같습니다.

    Extension
    Feature
    Object Type
    n : 점(.)이 줄바꿈 문자도 포함합니다.
  • m : 입력문자열이 한 줄 이상입니다.

  • x : pattern의 공백문자를 무시합니다.

  • n : 점(.)이 줄바꿈 문자도 포함합니다.
  • m : 입력문자열이 한 줄 이상입니다.

  • x : pattern의 공백문자를 무시합니다.

  • n : 점(.)이 줄바꿈 문자도 포함합니다.
  • m : 입력문자열이 한 줄 이상입니다.

  • x : pattern의 공백문자를 무시합니다다.

  • frac_secs

    소수점 이하 초(second)의 값으로, 최대 6자리 정밀도까지 지원됩니다.

    PG 공식 문서
    날짜/시간 포멧 모델

    expr2

    첫 번째 인자가 NULL이 아닐 경우 반환될 값입니다.

    expr3

    첫 번째 인자가 NULL일 경우 반환될 값입니다;

    두 번째와 세 번째 인자의 타입은 일치해야 하며, 필요 시 형 변환이 이루어집니다.

    예제

    date

    date 타입입니다; 기준이 되는 날짜를 나타냅니다.

    timestamp with timezone

    timestamptz 타입입니다; 기준이 되는 날짜+시간+timezone을 나타냅니다.

    number

    integer, double precision, numeric 타입입니다; 더할 개월 수를 나타내며, 내부적으로 정수형으로 변환되어 사용됩니다.

    예제

    date, timestamp 타입입니다; 기준이 되는 날짜 값입니다.

    weekday

    text 타입입니다; 찾고자 하는 요일을 나타내는 문자열입니다. Oracle의 요일 표기 규칙을 따르며, 입력된 문자열의 앞 3글자만 사용됩니다. 문자열 앞 3글자는 대/소문자 상관없이 아래와 같습니다. "sun", "mon", "tue", "wed", "thu", "fri", "sat"

    weekday_index

    integer 타입입니다; 찾고자 하는 요일의 인덱스입니다. 유효한 값은 1부터 7까지이며, 1은 일요일, 2는 월요일, …, 7은 토요일로 간주됩니다.

    예제

    expr

    date, timestamp, timestamptz 타입입니다; 반올림할 대상 날짜 또는 타임스탬프 값입니다.

    fmt

    text 타입입니다; 반올림 기준을 나타내는 포맷 문자열입니다. 예를 들어, 'YYYY', 'MM', 'DDD', 'HH24' 등 다양한 단위로 반올림할 수 있습니다. 이 값이 NULL이면, 기본값으로 처리되어 원래 값을 그대로 반환하거나 'DDD' (일 단위 반올림)로 처리됩니다.

    예제

    expr

    date, timestamp, timestamptz 타입입니다; 절삭(Truncation)할 대상 날짜 또는 타임스탬프 값입니다. 만약 이 값이 NULL이면 결과 역시 NULL이 됩니다.

    fmt

    text 타입입니다;

    날짜나 타임스탬프 값을 어느 단위까지 절삭할지를 지정하는 포맷 문자열입니다. 예를 들어, 'YYYY' (연도), 'MM' (월), 'DDD' (일) 등으로 지정할 수 있습니다. 이 값이 NULL이면 기본값(예: 'DDD')으로 처리됩니다.

    예제

    value

    smallint | int | bigint | real | double precision | numeric | text | timestamp | timestamptz 변환할 대상 값입니다. 숫자, 날짜, 타임스탬프 또는 문자열 값을 입력할 수 있습니다. text 타입의 경우, fmt 인자를 사용할 수 없으며, 인자로 입력받은 문자열을 그대로 반환합니다.

    fmt

    text 타입입니다;출력 형식을 지정하는 포맷 모델.숫자형은 예를 들어 'FM9999', 날짜/시간은 'YYYY-MM-DD HH24:MI:SS' 등으로 지정할 수 있습니다.

    지원하는 포멧 모델은 PG 공식 문서 를 참조합니다.

    * 날짜/시간 포멧 모델 * 숫자 포멧 모델

    예제

    value

    text, smallint, int, bigint, double precision, numeric 타입입니다; 변환할 대상 값입니다.

    fmt

    numeric 타입입니다; 텍스트 입력에 대해 적용할 숫자 형식을 지정하는 포맷 모델입니다. (예: '99999.99').

    지원하는 포멧 모델은 PG 공식 문서 를 참조합니다.

    * 숫자 포멧 모델

    파라미터

    예제

    str

    text 타입입니다; 변환할 대상 텍스트입니다. 이 문자열 내의 Unicode escape 시퀀스들이 실제 Unicode 문자로 치환됩니다.

    파라미터

    예제

    session_user

    실제 데이터베이스 접속한 사용자의 이름입니다.

    server_host

    인스턴스가 실행 중인 머신의 호스트 이름입니다.

    ip_address

    클라이언트가 연결된 머신의 IP 주소입니다.

    네임스페이스의 속성입니다. 대소문자를 구분하지는 않지만 최대 30자까지만 입력을 허용합니다.

    length

    출력의 길이입니다. 기본 값은 256바이트입니다. 1부터 4000까지만 허용됩니다.

    host

    클라이언트가 연결된 호스트 머신의 이름입니다.

    current_schema

    현재 활성 상태인 기본 스키마의 이름입니다.

    current_user

    현재 활성화된 권한을 가진 데이터베이스 사용자의 이름입니다.

    예제

    연도, 월, 일, 시, 분, 초를 표현할 수 있습니다.

  • 연도는 BC 4,713 ~ AD 294,276까지 표현할 수 있습니다.

  • 시간은 24시간 단위로 표현됩니다.


  • VARCHAR2 타입도 CHARACTER VARYING 타입과 마찬가지로 문자열 길이가 일정하지 않은 가변 길이를 갖습니다.

    VARCHAR2 타입은 다음과 같은 특징이 있습니다.

    • 문자열은 최대 10,485,760 byte(=10MB)까지 선언할 수 있습니다. 변환된 문자열의 길이가 해당 크기를 넘으면 에러가 발생합니다.

    • 문자열의 크기를 지정하지 않은 경우 Postgresql native type인 TEXT 처럼 동작합니다.

    • 문자열의 길이는 byte를 기준으로 지정할 수 있습니다.

    • SQL 문장에서 VARCHAR2 타입의 값을 표현할 때에는 항상 작은 따옴표(' ')를 사용합니다.

    • Postgresql의 기본 동작을 고려하여, ORACLE과는 다르게 빈 문자열('')과 NULL을 다른 값으로 간주합니다.

    다음은 VARCHAR2 타입을 설명하는 예입니다.

    위 예제에서 보듯이 EMP_NAME 컬럼은 10byte의 문자열 길이를 갖습니다. 예를 들어 'Peter' 문자열이 입력되었다면 'Peter' 문자열이 저장됩니다. 다시 말해 EMP_NAME 컬럼의 문자열 길이는 10byte로 선언되었지만 실제로 저장된 문자열 길이는 5byte입니다. 이처럼 VARCHAR2 타입은 선언된 문자열 길이의 범위 내에서 입력된 문자열 길이와 동일한 길이를 갖습니다.


    NVARCHAR2 타입은 유니코드 문자열을 저장하기 위한 타입입니다. 문자열 길이가 일정하지 않은 가변 길이를 갖는다는 특징이 있습니다.

    NVARCHAR2 타입은 다음과 같은 특징이 있습니다.

    • 기본적으로 VARCHAR2 타입과 유사하지만, 문자열의 길이가 문자 기준입니다.

      데이터베이스에 저장되는 타입의 길이는 다국어 문자 집합에 따라 달라집니다. 예를 들어 UTF8인 경우엔 size의 최대 3배, UTF16인 경우엔 size의 최대 2배가 됩니다.

    • NVARCHAR2 타입의 문자열의 최대 길이는 10,485,760자입니다.

    • SQL 문장에서 NVARCHAR2 타입의 값을 표현할 때에는 항상 작은 따옴표(' ')를 사용합니다.

    • Postgresql의 기본 동작을 고려하여, ORACLE과는 다르게 빈 문자열('')과 NULL을 다른 값으로 간주합니다.


    CLOB(Character Large Object)은 대용량의 문자열 데이터를 저장하기 위한 데이터 타입입니다.

    • 내부적으로 PostgreSQL의 text 타입을 기반으로 합니다.

    • 최대 크기는 바이트수 기준으로 약 1 GB입니다.

    • UTF-8 멀티바이트 문자(예: 한글, 일본어, 이모지 등)를 사용할 경우, 최대 문자열 길이가 싱글바이트 문자인 영문보다 훨씬 더 적어질 수 있음에 유의해야 합니다.

    • 문자열 결합 연산자 ||를 제공합니다.

    • SQL 문장에서 CLOB 타입의 값을 표현할 때에는 항상 작은따옴표(' ')를 사용합니다.


    BLOB(Binary Large Object)은 이진 데이터를 저장하기 위한 Oracle의 데이터 타입입니다.

    BLOB은 일반적으로 이미지, 바이너리 파일, 실행 파일 등 다양한 형태의 이진 데이터를 저장하는 데 사용됩니다.

    • 내부적으로 PostgreSQL의 bytea 타입을 기반으로 합니다.

    • 최대 크기는 PostgreSQL bytea 타입의 한계와 동일하게 약 1GB입니다.

    • 가공 함수, 연산자 등은 기본적으로 PostgreSQL bytea 타입의 연산을 그대로 사용할 수 있습니다.

    • SQL 문장에서 BLOB 타입의 값을 표현할 때에는 항상 작은따옴표(' ')를 사용하며, 이진 데이터를 직접 SQL에 넣을 경우 이스케이프 처리(E’’)가 필요합니다.

      • 예) \xDEADBEEF를 SQL에서 표현하는 BLOB → E'\\xDEADBEEF'::blob

    search_path를 설정하지 않은 경우

    search_path를 설정한 경우

    DATE

    VARCHAR2

    NVARCHAR2

    CLOB

    특징

    사용 예시

    BLOB

    특징

    사용 예시

    NULL 값은 집계에서 무시됩니다.

    최종 계산 단계

    • 그룹 내 모든 값들 수집 완료 시 최종적으로 중앙 값을 산출하는 단계입니다.

    • 먼저, 집계된 벡터 내의 값들을 퀵 정렬 알고리즘으로 정렬합니다.

    • 집계된 값의 개수가 홀수인 경우 중앙 값을 반환합니다.

    • 집계된 값의 개수가 짝수인 경우 중앙의 두 값의 평균을 계산하여 반환합니다.

      • 타임존이 있는 날짜 및 시간 관련 데이터의 경우, 중앙의 두 값을 UTC로 타임존 변경 후 평균값 계산합니다.

      • UTC 기준으로 평균 값 계산 후 중앙 두 값 중 큰 값의 타임존을 채택합니다.

    파라미터
    설명

    expression

    집계할 값으로, 아래와 같은 데이터 타입을 지원합니다. * 정수형: smallint, int, bigint

    • 실수형: real(float4), double precision

    • 날짜/시간형: timestamp, timestamptz, time, timetz, date집계 시 NULL 값은 무시되며, 각 타입에 맞는 내부 벡터에 값들이 저장됩니다.

    • 짝수 개의 값이 집계된 경우, 중앙의 두 값의 평균이 계산되어 반환합니다.

    • 내부적으로 C 코드에서 qsort 함수를 사용하여 값들을 정렬합니다.

    • 날짜 및 시간 관련 데이터의 경우, Oracle 방식의 처리 로직에 따라 추가적인 타임존 및 형 변환 처리 진행합니다.


    Syntax

    개요

    파라미터

    주의사항

    예제

    # 테스트 데이터
    create table employees (
      first_name varchar,
      last_name varchar,
      salary integer,
      hire_date timestamptz,
      commission_pct integer,
      bonus integer,
      status varchar
    );
    
    INSERT INTO employees (first_name, last_name, salary, hire_date, commission_pct, bonus, status) VALUES
    ('John', 'Doe', 55000, '2020-03-15 09:00:00', NULL, 2000, 'Active'),
    ('Jane', 'Smith', 62000, '2019-07-22 10:30:00', 10, 3000, 'Active'),
    ('Michael', 'Johnson', 72000, '2018-11-10 08:45:00', 7, 2500, 'Inactive'),
    ('Emily', 'Davis', 48000, '2021-05-01 12:00:00', NULL, 1500, NULL),
    ('David', 'Wilson', 53000, '2017-09-17 14:20:00', 8, 2200, NULL),
    ('Sarah', 'Brown', 60000, '2016-12-05 09:15:00', 12, 2800, 'Active'),
    ('James', 'Taylor', 75000, '2015-06-30 16:45:00', NULL, 2600, 'Resigned'),
    ('Jessica', 'Martinez', 68000, '2022-01-25 11:10:00', 5, 1800, NULL),
    ('Daniel', 'Anderson', 58000, '2020-10-05 13:35:00', 6, 2000, 'Active'),
    ('Laura', 'Thomas', 49500, '2023-08-12 08:00:00', 4, 1200, 'Probation');
    
    # 테스트 1
    -- commission_pct 값이 NULL이 아니면 bonus 값을, NULL이면 0을 반환함
    SELECT NVL2(commission_pct, bonus, 0)
    FROM employees;
    
     nvl2 
    ------
        0
     3000
     2500
        0
     2200
     2800
        0
     1800
     2000
     1200
    (10 rows)
    
    # 테스트 2
    -- 첫 번째 인자가 NULL이 아니면 두 번째 인자(예: 'Active')를, NULL이면 세 번째 인자(예: 'Inactive')를 반환함
    SELECT NVL2(status, 'Active', 'Inactive')
    FROM employees;
    
    
       nvl2   
    ----------
     Active
     Active
     Active
     Inactive
     Inactive
     Active
     Active
     Inactive
     Active
     Active
    (10 rows)
    # 테스트 1
    select add_months('2023-01-31'::date, 3);
    
     add_months 
    ------------
     2023-04-30
    (1 row)
    
    # 테스트 2
    select add_months('2023-01-31'::date, 3.9999);
    
     add_months 
    ------------
     2023-04-30
    (1 row)
    
    # 테스트 3
    SELECT ADD_MONTHS('2023-01-31 15:30:00+09'::timestamptz, 1);
    
         add_months      
    ---------------------
     2023-02-28 15:30:00
    (1 row)
    
    # 테스트 4
    SELECT ADD_MONTHS('2023-01-31 15:30:00+09'::timestamptz, 1.3);
    
         add_months      
    ---------------------
     2023-02-28 15:30:00
    (1 row)
    -- 문자형 요일 예제: '2023-05-15' 이후의 첫 번째 Monday 반환
    SELECT NEXT_DAY('2023-05-15'::date, 'Monday');
    
      next_day  
    ------------
     2023-05-22
    (1 row)
    
    -- 인덱스 기반 요일 예제: '2023-05-15' 이후의 첫 번째 월요일(인덱스 2) 반환
    SELECT NEXT_DAY('2023-05-15'::date, 2);
    
      next_day  
    ------------
     2023-05-22
    (1 row)
    
    -- TIMESTAMP WITH TIME ZONE 예제 (문자형):
    SELECT NEXT_DAY('2023-05-15 14:30:00+09'::timestamptz, 'Friday');
    
          next_day       
    ---------------------
     2023-05-19 14:30:00
    (1 row)
    
    -- TIMESTAMP WITH TIME ZONE 예제 (인덱스):
    SELECT NEXT_DAY('2023-05-15 14:30:00+09'::timestamptz, 6);
    
          next_day       
    ---------------------
     2023-05-19 14:30:00
    (1 row)
    # 테스트 1
    -- 날짜 반올림 예제: '2023-05-15' 날짜를 월 단위로 반올림
    SELECT ROUND('2023-05-15'::date, 'MONTH');
    -- 결과: 해당 월의 시작일 또는 월의 특정 기준일로 조정된 날짜 반환
    
       round    
    ------------
     2023-05-01
    (1 row)
    
    # 테스트 2
    -- 날짜 반올림 예제 (포맷 미지정): 기본 포맷('DDD')으로 반올림
    SELECT ROUND('2023-05-15'::date);
    -- 결과: '2023-05-15' 날짜가 포맷 모델에 따라 반올림된 결과 반환
    
       round    
    ------------
     2023-05-15
    (1 row)
    
    
    # 테스트 3
    -- 타임스탬프 반올림 예제: '2023-05-15 14:35:20' 타임스탬프를 시간 단위로 반올림
    SELECT ROUND('2023-05-15 14:35:20'::timestamp, 'HH24');
    -- 결과: '2023-05-15 15:00:00' (분과 초가 0으로 조정됨)
    
            round        
    ---------------------
     2023-05-15 15:00:00
    (1 row)
    
    # 테스트 4
    -- 타임스탬프 with time zone 반올림 예제: 기본 포맷('DDD')으로 반올림
    SELECT ROUND('2023-05-15 14:35:20+09'::timestamptz);
    -- 결과: 포맷 모델에 따라 반올림된 타임스탬프 반환
    
             round          
    ------------------------
     2023-05-16 00:00:00+09
    (1 row)
    # 테스트 1
    -- 날짜 절삭: '2023-05-15'를 월 단위로 절삭하여, 해당 월의 첫 날을 반환함
    SELECT TRUNC('2023-05-15'::date, 'MONTH');
    -- 결과: '2023-05-01'
    
       trunc    
    ------------
     2023-05-01
    (1 row)
    
    # 테스트 2
    -- 날짜 절삭: 포맷 미지정 시, 원래 날짜가 그대로 반환됨
    SELECT TRUNC('2023-05-15'::date);
    -- 결과: '2023-05-15'
    
       trunc    
    ------------
     2023-05-15\q
     
    (1 row)
    
    # 테스트 3
    -- 타임스탬프 절삭: '2023-05-15 14:35:20'를 시간 단위로 절삭하여, 분과 초를 제거함
    SELECT TRUNC('2023-05-15 14:35:20'::timestamp, 'HH24');
    -- 결과: '2023-05-15 14:00:00'
    
            trunc        
    ---------------------
     2023-05-15 14:00:00
    (1 row)
    
    # 테스트 4
    -- timestamptz 절삭: '2023-05-15 14:35:20+09'의 경우, 포맷 미지정 시 기본 포맷('DDD')으로  절삭됨
    SELECT TRUNC('2023-05-15 14:35:20+09'::timestamptz);
    -- 결과: 타임스탬프 값이 절삭된 결과 반환 (일 단위로 절삭)
    
             trunc          
    ------------------------
     2023-05-15 00:00:00+09
    (1 row)
    -- 숫자형 값 변환 (포맷 없이)
    SELECT TO_CHAR(12345);
    
     to_char 
    ---------
     12345
    (1 row)
    
    -- 숫자형 값 변환 (포맷 적용)
    SELECT TO_CHAR(12345, 'FM0000000');
    
     to_char 
    ---------
     0012345
    (1 row)
    
    -- 날짜형 값 변환 (기본 형식)
    SELECT TO_CHAR(SYSDATE());
    
           to_char       
    ---------------------
     2025-03-07 00:57:44
    (1 row)
    
    
    -- 날짜형 값 변환 (포맷 적용)
    SELECT TO_CHAR(SYSDATE(), 'DD-MM-YYYY SS:MI:HH24');
    
           to_char       
    ---------------------
     07-03-2025 46:58:00
    (1 row)
    
    -- 타임스탬프 변환 (timestamptz)
    SELECT TO_CHAR(SYSTIMESTAMP(), 'YYYY-MM-DD"T"HH24:MI:SS');
    
           to_char       
    ---------------------
     2025-03-06T15:59:30
    (1 row)
    -- 텍스트를 numeric로 변환 (기본 변환)
    SELECT TO_NUMBER('12345.67');
    
     to_number 
    -----------
      12345.67
    (1 row)
    
    -- numeric 값과 numeric 값 포맷 모델을 사용하여 numeric 변환
    SELECT TO_NUMBER(12345.12467, 99999.9);
    
     to_number 
    -----------
       12345.1
    (1 row)
    
    -- 정수형 값을 numeric로 변환
    SELECT TO_NUMBER(12345::int);
    
     to_number 
    -----------
         12345
    (1 row)
    
    
    -- double precision 값을 numeric로 변환
    SELECT TO_NUMBER(12345.67::double precision);
    
     to_number 
    -----------
      12345.67
    (1 row)
    -- 4자리 16진수 Unicode escape를 사용한 예제 (예: \0041는 'A'로 변환)
    SELECT UNISTR('\0041\0042\0043');
    -- 결과: 'ABC'
    
     unistr 
    --------
     ABC
    (1 row)
    
    -- 다양한 형식의 escape 시퀀스를 포함한 예제
    SELECT UNISTR('\u0041 \+00420042 \U00000041');
    
      unistr  
    ----------
     A 䈀42 A
    (1 row)
    
    
    select unistr('\0441\043B\043E\043D');
    
     unistr 
    --------
     слон
    (1 row)
    
    select unistr('d\u0061t\U00000061');
    
     unistr 
    --------
     data
    (1 row)
    
    -- 잘못된 형식 예제
    SELECT unistr('wrong: \db99');
    ERROR:  invalid Unicode surrogate pair
    
    SELECT unistr('wrong: \db99\0061');
    ERROR:  invalid Unicode surrogate pair
    
    SELECT unistr('wrong: \+00db99\+000061');
    ERROR:  invalid Unicode surrogate pair
    
    SELECT unistr('wrong: \+2FFFFF');
    ERROR:  invalid Unicode escape value
    
    SELECT unistr('wrong: \udb99\u0061');
    ERROR:  invalid Unicode surrogate pair
    
    SELECT unistr('wrong: \U0000db99\U00000061');
    ERROR:  invalid Unicode surrogate pair
    
    SELECT unistr('wrong: \U002FFFFF');
    ERROR:  invalid Unicode escape value
    
    SELECT unistr('wrong: \0000');
    ERROR:  invalid Unicode code point
    
    SELECT unistr('wrong: \u0000');
    ERROR:  invalid Unicode code point
    
    SELECT unistr('wrong: \+000000');
    ERROR:  invalid Unicode code point
    
    SELECT unistr('wrong: \U00000000');
    ERROR:  invalid Unicode code point
    select sys_context('userenv', 'current_schema');
     sys_context 
    -------------
     public
    
    select sys_context('userenv', 'host');
     sys_context 
    -------------
     [local]
    
    select sys_context('userenv', 'current_user');
     sys_context 
    -------------
     opensql
     
     select sys_context('userenv', 'session_user');
     sys_context 
    -------------
     opensql
    
    select sys_context('userenv', 'server_host');
     sys_context 
    -------------
     tmaxtibero
    
    select sys_context('userenv', 'ip_address');
     sys_context 
    -------------
     
     
     
    select oracle.sys_context('userenv', 'hostname');
    ERROR:  Not supported parameter: hostname
    {schema_name}.{type_name}
    
    -- 예시) o2types extension 설치 후, 새로 추가된 date라는 타입을 사용합니다.
    -- create table T (col1 oracle.date);
    
    -- 현재 접속 세션에서 스미카 'oracle'를 가장 우선순위 높은 search_path로 설정합니다.
    set search_path to oracle, public;
    
    {type_name}
    
    -- 예시) o2types extension 설치 후, 새로 추가된 date라는 타입을 사용합니다.
    -- create table T (col1 date);
    DATE
    CREATE TABLE T (a date);
    INSERT INTO T VALUES ('4713-01-01 01:11:30 BC');
    INSERT INTO T VALUES ('2023-03-19 13:29:30');
    VARCHAR2[(size)]
    EMP_NAME VARCHAR2(10)
    NVARCHAR(size)
    clob
    SELECT 'Hello, '::clob || 'World!'::clob;
    blob
    INSERT INTO files (data) VALUES (E'\\xDEADBEEF'::blob);
    MEDIAN
    (
      expression  IN { smallint, int, bigint,
                        real, double precision,
                        timestamp, timestamptz, time, timetz, date }
    )
    RETURNS median;
    # 테스트 테이블
    create table employees (name varchar, salary integer, hire_date timestamptz);
    INSERT INTO employees (name, salary, hire_date) VALUES
    ('John Doe', 55000, '2020-03-15 09:00:00'),
    ('Jane Smith', 62000, '2019-07-22 10:30:00'),
    ('Michael Johnson', 72000, '2018-11-10 08:45:00'),
    ('Emily Davis', 48000, '2021-05-01 12:00:00'),
    ('David Wilson', 53000, '2017-09-17 14:20:00'),
    ('Sarah Brown', 60000, '2016-12-05 09:15:00'),
    ('James Taylor', 75000, '2015-06-30 16:45:00'),
    ('Jessica Martinez', 68000, '2022-01-25 11:10:00'),
    ('Daniel Anderson', 58000, '2020-10-05 13:35:00'),
    ('Laura Thomas', 49500, '2023-08-12 08:00:00');
    
    
    -- 정수형 데이터의 중앙값 계산 예제
    SELECT MEDIAN(salary) FROM employees;
    
     median 
    --------
      59000
    (1 row)
    
    
    -- 날짜형 데이터의 중앙값 계산 예제
    SELECT MEDIAN(hire_date) FROM employees;
    
             median         
    ------------------------
     2019-11-17 21:45:00+09
    OpenSQL 설치 패키지 내부에 동봉될 O2 설치파일 모음 디렉토리는 아래와 같은 형식으로 제공됩니다. 내부에는 2가지 설치방법을 위한 파일(Makefile, install.sh)들이 제공됩니다.

    PostgreSQL가 설치된 Linux 플랫폼에서 O2 Extension을 make 커맨드를 통해 자동으로 설치할 수 있습니다

    O2 Extension이 포함하는 모든 Extension을 동시 설치하는 전체 설치, 개별 Extension을 설치하는 개별 설치로 구분합니다.

    PostgreSQL이 설치가 되어있고, 터미널 명령줄에서 make, pg_config 커맨드가 사용 가능한 상태여야 합니다.

    O2 Extension 설치 구성 요소가 모여 있는 디렉토리(Makefile 이 있는 디렉토리) 내부로 이동하여 아래의 make 커맨드를 수행합니다.

    개별 설치는 make 커맨드에 설치하려는 extension 이름을 인자로 추가해야 합니다.

    • DBMS_ALERT

    • DBMS_ASSERT

    • DBMS_OUTPUT

    • DBMS_PIPE

    • DBMS_RANDOM

    • DBMS_SCHEDULER

    • DBMS_SQL

    • DBMS_JOB

    • DBMS_RLS

    • UTL_FILE

    • O2Functions

    • O2Types

    • O2Views


    make 커맨드를 사용할 수 없는 환경에서 shell script를 이용하여 수기로 설치할 수 있습니다.

    PostgreSQL가 설치된 Linux 플랫폼에서 O2 Extension을 수동으로 설치할 수 있습니다. O2 Extension이 포함하는 모든 Extension을 동시 설치하는 전체 설치, 개별 Extension을 설치하는 개별 설치로 구분됩니다.

    PostgreSQL이 설치가 되어있고, 터미널 명령줄에서 pg_config 바이너리가 사용가능한 상태여야 합니다.

    OpenSQL 바이너리 설치 스크립트가 모여있는 디렉터리(scripts)로 이동한 후 install.sh 스크립트를 실행합니다.

    O2 Extension 설치 구성 요소가 모여 있는 디렉토리(Makefile 이 있는 디렉토리) 내부로 이동하여 install.sh 을 수행합니다. 설치 커맨드에 설치하려는 extension 이름을 인자로 넣어주어야 합니다.

    • DBMS_ALERT

    • DBMS_ASSERT

    • DBMS_OUTPUT

    • DBMS_PIPE

    • DBMS_RANDOM

    • DBMS_SCHEDULER

    • DBMS_SQL

    • DBMS_JOB

    • DBMS_RLS

    • UTL_FILE

    • O2Functions

    • O2Types

    • O2Views


    make/shell 설치 방법 모두 pg_config 가 사용 가능한 계정으로 설치를 수행해야 합니다.

    $PATH 변수 값에 /usr/pgsql-{PG버전}/bin 이 포함되어 있는지 확인해야합니다.

    $PATH가 설정되어있는 유저의 권한으로 우회하여 설치를 진행해야 합니다.

    sudo 권한을 통해 아래와 같은 명령어를 수행합니다.

    O2 extension 은 OpenSQL 라이센스를 확인하므로, 아래와 같이 라이센스 파일 경로를 지정해주어야 합니다.


    O2 Extension들은 아래와 같이 크게 4종류 그룹으로 분류됩니다.

    각 그룹들의 하위 목록은 실제 제공되는 개별 Extension의 이름을 나열한 것입니다.

    • Types Extension

      • O2Types

    • Views Extension

      • O2Views

    • Functions Extension

      • O2Functions

    • Package Extensions

      • DBMS_ALERT

      • DBMS_ASSERT

      • DBMS_OUTPUT

    각 extension들은 아래와 같은 파일들로 구성되어 있고 각 extension별로 개별 생성 가능합니다.

    예시) O2Functions Extension의 구성 파일은 다음과같습니다.

    • Shared object file (eg. o2functions.so)

    • Control file (eg. o2functions.control)

    • Script file (eg. o2functions—1.0.sql, o2functions—1.0—1.1.sql, …)

    그리고 extension들의 버전 정보를 한 곳으로 묶은 VERSION.json 파일이 존재합니다.


    O2 Extension을 설치한 후 활성화를 하기 위해서는 아래와 같이 SQL 커맨드를 실행해야 합니다.

    • O2 Extension들은 내부에 정의한 객체를 생성하기 위해 스키마 oracle 를 사용합니다.

    • Package Extension(DBMS_ALERT, DBMS_PIPE 등)은 각자 extension 이름을 스키마로 사용합니다.

    • O2 Extension에서 사용될 스키마 이름을 변경하기 위해서는 각 extension의 control 파일 내부 schema 항목의 값을 수정해야합니다. (단, 각 Package extension들은 스키마 이름이 고정값으로 변경할 수 없습니다.)


    O2 Extension을 상위 버전으로 업데이트 하기 위해서는 아래와 같이 SQL 커맨드를 실행해야 합니다.


    HA 구성 시 각 노드에 직접 붙어 수동으로 O2 Extension 설치 및 업데이트를 진행해야 합니다.

    또한 각 노드에 설치된 O2 Extension version은 일치하게 설치되도록 합니다.

    노드 간 버전 차이가 발생하면 버전 간 동작 차이로 인해 쿼리 수행 시 어느 노드로 보내 졌는지에 따라 다른 결과값이 나올 수 있습니다.

    개요

    시스템 요구 사항

    O2 설치파일 디렉토리 구조

    ls -rlta
    
    total 60
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 utl_file
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 o2views
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 o2types
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 o2functions
    -rw-r--r--  1 root root 3266 Mar 13 05:09 install.sh        # sh 설치용 스크립트
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 dbms_sql
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 dbms_random
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 dbms_pipe
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 dbms_output
    drwxr-xr-x  2 root root 4096 Mar 13 05:09 dbms_alert
    -rw-r--r--  1 root root 1465 Mar 13 05:09 VERSION.json      # o2 extensions 버전 정보
    -rw-r--r--  1 root root  672 Mar 13 05:09 Makefile          # make 방식설치용 파일
    drwxr-xr-x 12 root root 4096 Mar 13 05:09 .
    drwxr-xr-x  6 root root 4096 Mar 13 05:09 ..
    cd o2
    make all # o2 extensions 전체 설치
    
    # 아래는 전체 설치 과정에서 출력되는 예시 로그
    make[1]: Entering directory '/home/opensql/o2/build/o2-dist-1.0.1/o2functions'
    /usr/bin/mkdir -p '/home/opensql/postgres/build/16/lib'
    /usr/bin/mkdir -p '/home/opensql/postgres/build/16/share/extension'
    /usr/bin/mkdir -p '/home/opensql/postgres/build/16/share/extension'
    /usr/bin/install -c -m 755  o2functions.so '/home/opensql/postgres/build/16/lib/o2functions.so'
    /usr/bin/install -c -m 644 .//o2functions.control '/home/opensql/postgres/build/16/share/extension/'
    /usr/bin/install -c -m 644 .//VERSION.json .//o2functions--1.0.sql  '/home/opensql/postgres/build/16/share/extension/'
    make[1]: Leaving directory '/home/opensql/o2/build/o2-dist-1.0.1/o2functions'
    ...
    cd o2
    # make [ extension1 extension2 ... ]
    make o2functions o2types dbms_output
    
    # 아래는 make 수행 시 나오는 예시 로그
    make -C o2functions install
    make[1]: Entering directory '/home/opensql/o2/build/o2-dist-1.0.1/o2functions'
    /usr/bin/mkdir -p '/home/opensql/postgres/build/16/lib'
    /usr/bin/mkdir -p '/home/opensql/postgres/build/16/share/extension'
    /usr/bin/mkdir -p '/home/opensql/postgres/build/16/share/extension'
    /usr/bin/install -c -m 755  o2functions.so '/home/opensql/postgres/build/16/lib/o2functions.so'
    /usr/bin/install -c -m 644 .//o2functions.control '/home/opensql/postgres/build/16/share/extension/'
    /usr/bin/install -c -m 644 .//VERSION.json .//o2functions--1.0.sql  '/home/opensql/postgres/build/16/share/extension/'
    make[1]: Leaving directory '/home/opensql/o2/build/o2-dist-1.0.1/o2functions'
    ...
    cd scripts
    sh ./install.sh o2
    # sh install.sh [ extension1 extension2 ... ]
    sh install.sh o2functions o2types dbms_output
    
    # 아래는 개별 설치 과정에서 출력되는 예시로그
    Installing extensions to:
      Library directory: /home/opensql/postgres/build/16/lib
      Shared extension directory: /home/opensql/postgres/build/16/share/extension
    Extensions to install: o2functions o2types dbms_output
    Installing extension: o2functions
      Copied control file: ./o2functions.control
      Copied SQL file: ./o2functions--1.0.sql
      Copied shared library: ./extensions/functions/o2functions.so
    Installing extension: o2types
      Copied control file: ./o2types.control
      Copied SQL file: ./o2types--1.0.sql
      Copied shared library: ./extensions/types/o2types.so
    Installing extension: dbms_output
      Copied control file: ./dbms_output.control
      Copied SQL file: ./dbms_output--1.0.sql
      Copied shared library: ./extensions/dbms_output/dbms_output.so
    Copied METADATA: VERSION.json
    Installation completed.
    [root@20fec5585ddd /]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/pgsql-16/bin/
    
    # 현재 접속한 계정의 $PATH에 경로값이 없다면 PG 버전에 알맞은 경로를 $PATH 경로에 추가
    [root@20fec5585ddd /]# echo "export PATH=$PATH:/usr/pgsql-16/bin/" >> ~/.bashrc
    [root@20fec5585ddd /]# source ~/.bashrc
    sudo -u {PG경로가 $PATH에 설정된 다른 USER} bash -l -c "{make 또는 shell 설치 명령}"
    
    # 예시)
    # postgres 유저의 $PATH에 /usr/pgsql-16/bin/ 경로가 등록되어 있고,
    # opensql이라는 유저로 접속하여 make 방식으로 o2 설치하려는 경우
    [opensql@20fec5585ddd /]# sudo -u postgres bash -l -c "make all"
    # postgresql.conf의 shared_preload_libraries의 첫 번째로 opensql_license 추가
    shared_preload_libraries = 'opensql_license'
    
    # 라이선스 파일 경로 환경변수 설정
    export OPENSQL_LICENSE_PATH="/path/to/license.xml"
    CREATE EXTENSION {extension name};
    ALTER EXTENSION {extension name} UPDATE TO {new version};

    make 설치방법

    설치 전 요구사항

    전체 설치

    개별 설치

    개별 설치 extension 이름 목록

    shell 설치방법

    설치 전 요구사항

    전체 설치

    개별 설치

    개별 설치 extension 이름 목록

    설치 유의 사항

    pg_config와 $PATH 설정

    $PATH 값에 PG경로가 설정 되어있지 않은 유저 계정에서의 설치 방법

    라이선스 관련 설정

    설치 구성 요소

    Extension 종류

    Extension 구성 요소

    O2 Extension 활성화

    O2 Extension 업데이트

    HA 구성 시 주의 사항

    PostgreSQL 최소 버전

    O2Functions

    REGEXP_LIKE

    Function

    15

    REGEXP_COUNT

    Function

    15

    REGEXP_INSTR

    A. 데이터베이스 성능 저하는 다양한 이유로 인해 발생할 수 있으며 문제 해결을 위해서는 정확한 원인을 찾는 것이 중요합니다. 성능 저하 해결에 대한 자세한 내용은 TroubleShooting의 Common Issues 항목을 참조합니다.

    A. O2 Extension에서는 PostgreSQL의 빌트인 에러 코드와 O2 Extension의 커스텀 에러 코드를 발생시킵니다. PostgreSQL의 빌트인 에러 코드는 PostgreSQL Error Codes 매뉴얼을 참조합니다. O2 Extension의 커스텀 에러 코드는 TroubleShooting의 에러 코드 항목을 참조합니다.

    A. PostgreSQL은 Extension을 간단한 SQL 구문으로 업데이트할 수 있도록 설계되어 있습니다. O2 Extension도 마찬가지로 간단한 SQL 구문을 사용하여 업데이트할 수 있다. 자세한 내용은 설치 안내서를 참조합니다.

    A. PostgreSQL은 Extension을 데이터베이스 객체로서 관리하며 간단한 SQL 구문으로 제거할 수 있도록 설계되어 있습니다. O2 Extension도 마찬가지로 간단한 SQL 구문을 사용하여 제거할 수 있습니다. 자세한 내용은 설치 안내서를 참조합니다.

    A. O2 Extension 관련 로그는 PostgreSQL의 로그 파일에 함께 작성됩니다.

    Q. PostgreSQL 서버에 O2 Extension을 어떻게 설치합니까?

    Q. 설치한 O2 Extension을 어떻게 활성화합니까?

    Q. O2 Extension이 특정 PostgreSQL 버전과 호환되지 않는 경우도 있습니까?

    설치 안내서
    설치 안내서

    Q. O2 Extension을 사용한 후 성능 저하가 발생하면 어떻게 해결할 수 있습니까?

    Q. O2 Extension 사용 중 발생하는 일반적인 에러 코드와 그 해결 방법은 무엇입니까?

    Q. O2 Extension을 최신으로 업데이트하는 방법은 무엇입니까?

    Q. 더 이상 필요하지 않은 O2 Extension을 어떻게 제거합니까?

    Q. O2 Extension 관련 로그를 어디서 확인할 수 있습니까?

    DBMS_RANDOM

    DBMS_RANDOM은 임의의 숫자를 생성하는 기능을 제공합니다.

    함수 / 프로시저
    반환 타입
    설명

    DBMS_PIPE

  • DBMS_RANDOM

  • DBMS_SCHEDULER

  • DBMS_SQL

  • DBMS_JOB

  • DBMS_RLS

  • UTL_FILE

  • Function

    15

    REGEXP_SUBSTR

    Function

    15

    REGEXP_REPLACE

    Function

    15

    O2Views

    O2_SHARED_MEMORY_INFO

    View

    15

    DBMS_ALERT

    REMOVEALL

    Procedure

    15

    WAITANY

    Procedure

    15

    DBMS_RLS

    전체 기능

    Procedure

    16

    DOUBLE PRECISION

    표준 정규 분포(가우스 분포)에서의 임의값을 추출하는 함수입니다.

    RANDOM

    INTEGER

    -2 ^31보다 크거나 같고, 2 ^31보다 작은 임의의 정수를 생성하는 함수입니다.

    SEED

    VOID

    입력받은 seed 번호나 문자열을 지정하여 DBMS_RANDOM 패키지를 초기화하는 프로시저입니다.

    STRING

    TEXT

    임의의 문자열을 생성하는 함수입니다.

    TERMINATE

    n/a

    DBMS_RANDOM 패키지를 종료합니다.

    VALUE

    DOUBLE PRECISION

    범위 내에서 임의의 숫자를 생성하는 함수입니다.


    설치는 super user에 이루어져야 하고 public으로 공개되어 있습니다.


    본 절에서는 DBMS_RANDOM 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명합니다.

    INITIALIZE 프로시저는 입력 받은 seed 번호를 지정하여 DBMS_RANDOM 패키지를 초기화하는 프로시저입니다.

    파라미터
    설명

    val

    DBMS_RANDOM 내부 알고리즘에서 임의값을 생성할 seed 번호입니다.

    NORMAL 함수는 표준 정규 분포(가우스 분포)에서의 임의값을 추출하는 함수입니다.

    RANDOM 함수는 -2 ^31보다 크거나 같고, 2 ^31보다 작은 임의의 정수를 생성합니다.

    SEED 프로시저는 입력받은 seed 번호나 문자열을 지정하여 DBMS_RANDOM 패키지를 초기화하는 프로시저입니다.

    파라미터
    설명

    val

    DBMS_RANDOM 내부 알고리즘에서 임의값을 생성할 seed 번호나 문자열입니다.

    STRING 함수는 임의의 문자열을 생성하는 함수입니다.

    파라미터
    설명

    opt

    생성하고 싶은 문자열의 형태이고, 항목은 아래와 같습니다.

    • 'u' 또는 'U' : 대문자 알파벳의 문자열입니다.

    • 'l' 또는 'L' : 소문자 알파벳의 문자열입니다.

    • 'a' 또는 'A' : 대소문자 구분 없이 임의의 알파벳의 문자열입니다.

    len

    생성할 문자열의 길이입니다.

    DBMS_RANDOM 패키지를 종료합니다.

    VALUE 함수는 범위 내에서 임의의 숫자를 생성합니다. 범위가 지정되지 않은 경우는 0보다 크거나 같고 1보다 작은 숫자를 생성합니다.

    파라미터
    설명

    low

    임의값 범위 내에서의 최소값입니다.

    high

    임의값 범위 내에서의 최대값으로, 이 값보다 크거나 같을 수 없습니다.

    INITIALIZE

    n/a

    입력받은 seed 번호를 지정하여 DBMS_RANDOM 패키지를 초기화하는 프로시저입니다.

    개요

    NORMAL

    INITIALIZE(val IN INTEGER)
    CALL DBMS_RANDOM.INITIALIZE(6475);
    NORMAL
    RETURNS DOUBLE PRECISION
    x := DBMS_RANDOM.NORMAL();
    RANDOM
    RETURNS INTEGER
    x := DBMS_RANDOM.RANDOM();
    SEED(val IN INTEGER)
    
    SEED(val IN TEXT)
    CALL DBMS_RANDOM.SEED(8);
    
    CALL DBMS_RADOM.SEED('some string value');
    STRING(opt IN TEXT, len IN INT)
    RETURNS TEXT
    x := DBMS_RANDOM.STRING('a', 10);
    TERMINATE
    VALUE
    RETURNS DOUBLE PRECISION;
    
    VALUE (low DOUBLE PRECISION, high DOUBLE PRECISION)
    RETURNS DOUBLE PRECISION;
    x := DBMS_RANDOM.VALUE();
    
    x := DBMS_RANDOM.VALUE(-30, 100);

    권한

    구성

    INITIALIZE

    프로토타입

    파라미터

    예제

    NORMAL

    프로토타입

    예제

    RANDOM

    프로토타입

    예제

    SEED

    프로토타입

    파라미터

    예제

    STRING

    프로토타입

    파라미터

    예제

    TERMINATE

    프로토타입

    VALUE

    프로토타입

    파라미터

    예제

    DBMS_OUTPUT

    개요

    DBMS_OUTPUT은 메시지를 버퍼에 저장하고 버퍼로부터 메시지를 읽어오기 위한 인터페이스를 제공하는 패키지입니다.

    함수 / 프로시저
    반환 타입
    설명

    DISABLE

    n/a

    할당된 메시지 버퍼를 제거하고, DBMS_OUTPUT 패키지 내의 다른 프로시저를 사용할 수 없게 하는 프로시저입니다.


    설치는 super user에 이루어져야 하고 public으로 공개되어 있습니다.


    본 절에서는 DBMS_OUTPUT 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명합니다.

    할당된 메시지 버퍼를 제거하고, DBMS_OUTPUT 패키지 내의 다른 프로시저를 사용할 수 없게 하는 프로시저입니다. 이 프로서지를 실행하면 메시지 버퍼에 남아있는 모든 메시지가 함께 제거됩니다.

    지정된 크기의 메시지 버퍼를 할당하고 DBMS_OUTPUT 패키지 내의 다른 프로시저를 사용할 수 있게 하는 프로시저입니다. 이 프로시저를 여러 번 호출하면 가장 크게 지정한 크기로 메시지 버퍼를 할당합니다.

    파라미터
    설명

    메시지 버퍼로부터 라인 단위로 메시지를 읽어오는 프로시저입니다. 이 프로시저는 라인 단위로 메시지를 읽으며, 하나의 라인을 형성하지 않은 메시지는 읽지 않습니다.

    GET_LINE 또는 GET_LINES 프로시저를 호출한 후에 PUT 또는 PUT_LINE 프로시저를 호출하면, 현재까지 메시지 버퍼에 남아 있던 메시지는 모두 제거됩니다.

    한 라인의 메시지는 최대 255bytes의 크기를 가지므로, 출력 파라미터의 크기를 충분하게 설정해야 합니다.

    • GET_LINE GET_LINE 프로시저는 한 번 호출될 때마다 하나의 라인만을 읽어옵니다.

    • GET_LINES GET_LINES 프로시저는 지정된 수만큼, 한 번에 여러 라인의 메시지를 읽어옵니다. 이때 메시지 버퍼로부터 실제로 읽어온 메시지 라인의 수를 반환합니다. 만약 메시지 버퍼 내에 충분한 수의 메시지 라인이 없어서 지정된 수 만큼의 메시지 라인을 가져오지 못하면, 가져온 메시지 라인의 수 만큼만 저장됩니다.

    파라미터
    설명
    • GET_LINE

    • GET_LINES

    메시지 버퍼에 EOL 문자를 저장하는 프로시저입니다.

    PUT 프로시저로 메시지를 저장한 경우 EOL 문자가 없으므로 라인 단위로 메시지를 읽는 GET_LINE, GET_LINES 프로시저로 문자열을 읽어 올 수 없습니다. 단, NEW_LINE 프로시저를 사용하면 GET_LINE, GET_LINES 프로시저로 문자열을 읽어 올 수 있습니다.

    메시지 버퍼에 메시지를 저장하는 프로시저입니다.

    • PUT PUT 프로시저는 하나의 라인을 여러 번에 걸쳐 저장할 수 있습니다. 버퍼에 저장되는 메시지의 마지막 라인 끝에 EOL 문자가 첨부되지 않습니다.

    • PUT_LINE PUT_LINE 프로시저는 PUT 프로시저와는 반대로 버퍼에 저장되는 메시지의 마지막 라인 끝에 EOL 문자를 첨부합니다. 만약 EOL 문자만을 저장하려면 NEW_LINE 프로시저를 호출합니다.

    파라미터
    설명

    DBMS_ALERT

    DBMS_ALERT은 알림을 등록하고, 보내고, 받을 수 있는 기능을 지원하는 패키지입니다.

    함수 / 프로시저
    반환 타입
    설명

    DBMS_RLS

    DBMS_RLS 패키지는 가상 개인 데이터베이스 기능을 구성하고 관리하는 데 사용할 수 있는 프로시저를 제공합니다.

    가상 개인 데이터베이스에서는 테이블에 대해 동적으로 조건문을 생성하여 해당 스키마 객체에서 반환하는 로우에 대한 접근을 선택적으로 제한합니다.

    함수 / 프로시저
    반환 타입
    설명

    'x' 또는 'X' : 임의의 대문자 알파벳 또는 숫자의 문자열이다.

  • 'p' 또는 'P' : 임의의 출력 가능한 문자들의 배열그 외의 값일 경우에는 기본적으로 대문자 알파벳의 문자열입니다.

  • ENABLE(buffer_size)

    n/a

    지정된 크기의 메시지 버퍼를 할당하고 DBMS_OUTPUT 패키지 내의 다른 프로시저를 사용할 수 있게 하는 프로시저입니다.

    GET_LINE(line OUT, status OUT)

    n/a

    메시지 버퍼로부터 하나의 라인 메시지를 읽어오는 프로시저입니다.

    GET_LINES(lines OUT, numlines IN OUT)

    n/a

    메시지 버퍼로부터 지정된 수만큼, 한 번에 여러 라인의 메시지를 읽어오는 프로시저입니다.

    NEW_LINE

    n/a

    메시지 버퍼에 EOL 문자를 저장하는 프로시저입니다.

    PUT(item)

    n/a

    메시지 버퍼에 메시지를 저장하는 프로시저입니다. 하나의 라인을 여러 번에 걸쳐 저장합니다.

    PUT_LINE(item)

    n/a

    메시지 버퍼에 메시지를 저장하는 프로시저입니다. 버퍼에 저장되는 메시지의 마지막 라인 끝에 EOL 문자를 첨부합니다.

    buffer_size

    할당할 메시지 버퍼의 크기입니다. (단위: Byte)

    line, lines

    메시지 버퍼로부터 읽어 온 한 라인 또는 여러 라인의 메시지입니다.

    status

    메시지를 성공적으로 읽어 온 경우에는 0을 반환합니다.메시지를 성공적으로 읽어 오지 못한 경우에는 1을 반환합니다.

    numlines

    읽어 올 메시지 라인의 수를 입력하고, 실제로 읽어 온 메시지 라인의 수를 출력합니다.

    data

    메시지 버퍼에 저장할 메시지 데이터입니다.

    권한

    구성

    DISABLE

    프로토타입

    예제

    ENABLE

    프로토타입

    파라미터

    예제

    GET_LINE, GET_LINES

    프로토타입

    파라미터

    예제

    NEW_LINE

    프로토타입

    예제

    PUT, PUT_LINE

    프로토타입

    파라미터

    예제

    DBMS_OUTPUT.DISABLE();
    CALL DBMS_OUTPUT.DISABLE();
    DBMS_OUTPUT.ENABLE 
    (
        buffer_size IN INTEGER DEFAULT 20000
    );
    CALL DBMS_OUTPUT.ENABLE(32768);
    DBMS_OUTPUT.GET_LINE 
    (
        line   OUT TEXT, 
        status OUT INTEGER
    );
    DBMS_OUTPUT.GET_LINES 
    (
        lines    OUT    TEXT[], 
        numlines IN OUT INTEGER
    );
    DO $$
    DECLARE
        buff	TEXT;
        stts	INTEGER;
    BEGIN
        CALL DBMS_OUTPUT.PUT_LINE ('ORAFCE TEST 1');
        CALL DBMS_OUTPUT.GET_LINE(buff, stts);
    END;
    $$;
    DO $$
    DECLARE
        buff_arr    TEXT[];
        stts	    INTEGER := 10;
    BEGIN
        CALL DBMS_OUTPUT.PUT_LINE ('ORAFCE TEST 1');
        CALL DBMS_OUTPUT.PUT_LINE ('ORAFCE TEST 2');
        CALL DBMS_OUTPUT.PUT_LINE ('ORAFCE TEST 3');
        CALL DBMS_OUTPUT.GET_LINES(buff_arr, stts);
        END;
    $$;
    DBMS_OUTPUT.NEW_LINE();
    CALL DBMS_OUTPUT.NEW_LINE();
    DBMS_OUTPUT.PUT
    (
        data IN NUMERIC
    );
    DBMS_OUTPUT.PUT
    (
       data IN TEXT
    );
    DBMS_OUTPUT.PUT_LINE
    (
       data IN NUMERIC
    );
    DBMS_OUTPUT.PUT_LINE
    (
       data IN TEXT
    );
    CALL DBMS_OUTPUT.PUT('PUT_EXAMPLE');
    CALL DBMS_OUTPUT.PUT_LINE('TIBERO');

    n/a

    등록된 ALERT을 제거하는 프로시저입니다.

    REMOVEALL

    n/a

    등록된 모든 ALERT을 제거하는 프로시저입니다. - PostgreSQL Version 15 이상부터 사용 가능합니다.

    SIGNAL(name, message)

    n/a

    ALERT을 발생시켜 이를 기다리고 있는 세션들을 깨워주는 프로시저입니다.

    WAITANY(name OUT, message OUT, status OUT, timeout)

    n/a

    어떠한 종류든 내가 등록한 ALERT을 기다리는 프로시저입니다. - PostgreSQL Version 15 이상부터 사용 가능합니다.

    WAITONE(name, message OUT, status OUT, timeout)

    n/a

    특정 ALERT을 기다리는 프로시저입니다.


    설치는 super user에 이루어져야 하고 관리자가 DBMS_ALERT 스키마 접근 권한 부여한 유저만 접근 가능합니다.


    본 절에서는 DBMS_ALERT 패키지에서 제공하는 프로시저를 알파벳 순으로 설명합니다.

    이름
    타입
    값
    설명

    MAXWAIT

    INTEGER

    86400000

    알림을 기다릴 수 있는 최대 시간입니다.(1000일, 사실상 영원합니다.)

    기다릴 ALERT을 등록하는 프로시저입니다.

    등록된 ALERT은 REGISTER 프로시저를 수행한 세션에서만 유효합니다. 중복해서 등록할 필요는 없습니다.(무시됩니다.)

    다른 세션에서 ALERT을 기다리려면 새로 등록해야 합니다.

    파라미터
    설명

    name

    등록/기다릴 ALERT의 이름입니다.

    등록된 ALERT을 제거하는 프로시저입니다. 이 프로시저는 프로시저를 수행하는 세션에만 영향을 줍니다. 즉, 다른 세션에서 등록한 동일 이름에 대해서는 영향을 주지 않습니다. 등록되지 않은 ALERT을 REMOVE 하려고 하면 에러가 발생합니다.

    파라미터
    설명

    name

    제거할 ALERT의 이름입니다.

    등록된 모든 ALERT을 제거하는 프로시저입니다. 이 프로시저는 프로시저를 수행하는 세션에만 영향을 줍니다. 즉, 다른 세션에서 등록한 동일 이름에 대해서는 영향을 주지 않습니다.

    • PostgreSQL Version 15 이상부터 사용 가능합니다.

    ALERT을 발생시켜 이를 기다리고 있는 세션들을 깨워주는 프로시저입니다.

    파라미터
    설명

    name

    발생시킬 ALERT의 이름입니다.

    message

    함께 전달할 메시지입다.

    어떠한 종류든 내가 등록한 ALERT을 기다리는 프로시저입니다. 세션에서 이전에 등록했던 ALERT이 발생한 경우 깨어납니다. 또한 타임아웃이 지나면 깨어날 수 있습니다. 특정 ALERT을 받아서 깨어나도 해당 ALERT이 자동으로 REMOVE 되지 않습니다.

    • PostgreSQL Version 15 이상부터 사용 가능합니다.

    파라미터
    설명

    name

    WAITANY 프로시저가 깨어나도록 한 ALERT의 이름입니다. 타임아웃으로 깨어난 경우 값이 없습니다.

    message

    WAITANY 프로시저가 깨어나도록 한 ALERT와 함께 전달된 메시지입니다. 타임아웃으로 깨어난 경우 값이 없습니다.

    status

    1 : 타임아웃으로 깨어난 경우입니다. 0 : ALERT이 발생해서 깨어난 경우입니다.

    특정 ALERT를 기다리는 프로시저이전에 등록했던 ALERT만 기다릴 수 있으며, 등록하지 않은 ALERT를 지정하는 경우 에러가 발생합니다. 또한 timeout이 지나면 깨어날 수 있습니다. 특정 ALERT를 받아서 깨어나도 해당 ALERT이 자동으로 REMOVE 되지 않습니다.

    파라미터
    설명

    name

    기다릴 ALERT의 이름입니다.

    message

    ALERT와 함께 전달된 메시지입니다.

    타임아웃으로 깨어난 경우 값이 없습니다.

    status

    1 : 타임아웃으로 깨어난 경우입니다.

    0 : ALERT가 발생해서 깨어난 경우입니다.

    REGISTER(name)

    n/a

    기다릴 ALERT을 등록하는 프로시저입니다.

    개요

    REMOVE(name)

    DBMS_ALERT.REGISTER
    (
        name         IN   TEXT
    );
    CALL DBMS_ALERT.REGISTER('ABC');
    DBMS_ALERT.REMOVE 
    (
        name         IN   TEXT
    );
    CALL DBMS_ALERT.REMOVE('ABC');
    DBMS_ALERT.REMOVEALL(); 
    CALL DBMS_ALERT.REMOVEALL();
    DBMS_ALERT.SIGNAL
    (
        name         IN   TEXT,
        message      IN   TEXT
    ); 
    CALL DBMS_ALERT.SIGNAL('ABC', 'DEF');
    DBMS_ALERT.WAITANY
    (
        name         OUT   TEXT,
        message      OUT   TEXT,
        status       OUT   INTEGER,
        timeout      IN    NUMERIC    DEFAULT    MAXWAIT
    ); 
    DO $$
    declare
        stack text;
        event_name text;
        message text;
        rc int;
    BEGIN
        call dbms_alert.waitany(event_name, message, rc, timeout);
        stack := 'event: ' || coalesce(event_name, 'NULL') || ', message: ' || coalesce(message, 'NULL') || ', return_code: ' || rc;
        return stack;
    END;
    $$ language plpgsql;
    DBMS_ALERT.WAITONE
    (
        name         IN   TEXT,
        message      OUT  TEXT,
        status       OUT  INTEGER,
        timeout      IN   NUMERIC    DEFAULT    MAXWAIT
    ); 
    DO $$
    declare
        stack text;
        message text;
        rc int;
    BEGIN
        call dbms_alert.waitone(event_name, message, rc, timeout);
        stack := 'message: ' || coalesce(message, 'NULL') || ', return_code: ' || rc;
        return stack;
    END;
    $$ language plpgsql;

    권한

    구성

    상수

    REGISTER

    프로토타입

    파라미터

    예제

    REMOVE

    프로토타입

    파라미터

    예제

    REMOVEALL

    프로토타입

    예제

    SIGNAL

    프로토타입

    파라미터

    예제

    WAITANY

    프로토타입

    파라미터

    예제

    WAITONE

    프로토타입

    파라미터

    예제

    DROP_POLICY

    n/a

    해당 테이블에 대해 걸려 있는 가상 개인 데이터베이스 보안 정책을 제거한다.

    ENABLE_POLICY

    n/a

    해당 테이블에 대해 걸려 있는 가상 개인 데이터베이스 보안 정책을 활성화 혹은 비활성화한다.


    DBMS_RLS는 다른 o2 extension처럼 설치 후, 활성화 하기 전에 추가적으로 postgresql.conf 파일을 수정해야 합니다.

    또한, 해당 작업 후에는 반드시 postgresql 서버를 재기동하여 수정한 값을 적용시켜야 합니다.

    postgresql.conf 파일 내용 중 shared_preload_libraries 항목의 값으로써 dbms_rls 를 추가하여, postgresql 기동될때 DBMS_RLS 구성파일이 같이 로드될 수 있도록 설정해줍니다.

    아래와 같이 postgresql.conf 파일을 수정합니다.

    shared_preload_libraries는 사용자 환경에 따라 다른 extension들이 이미 추가되어 있을 수도 있습니다.

    그러한 경우에는 , 를 활용하여 dbms_rls를 덧붙여줍니다.


    본 절에서는 DBMS_RLS 패키지에서 제공하는 프로시저를 알파벳 순으로 설명합니다.

    해당 테이블에 대해 가상 개인 데이터베이스 보안 정책을 추가합니다.

    파라미터
    설명

    object_schema

    테이블을 가지고 있는 스키마입니다. 명시하지 않으면 Public 스키마입입니다.

    object_name

    테이블의 이름입니다.

    policy_name

    새로 추가하고자 하는 정책의 이름입니다. 동일한 테이블 내에서 유일해야 합니다.

    해당 테이블에 대해 걸려 있는 가상 개인 데이터베이스 보안 정책을 제거됩니다.

    파라미터
    설명

    object_schema

    테이블을 가지고 있는 스키마입니다. 명시하지 않으면 Public 스키마입니다.

    object_name

    테이블의 이름입니다.

    policy_name

    제거하고자 하는 정책의 이름입니다.

    해당 테이블에 대해 걸려 있는 가상 개인 데이터베이스 보안 정책을 활성화 혹은 비활성화합니다.

    파라미터
    설명

    object_schema

    테이블을 가지고 있는 스키마입니다. 명시하지 않으면 Public 스키마입니다.

    object_name

    테이블의 이름입니다.

    policy_name

    활성화 혹은 비활성할 정책의 이름입니다.

    ADD_POLICY

    n/a

    개요

    참고

    PostgreSQL Version 16 이상부터 사용 가능합니다.

    해당 테이블에 대해 가상 개인 데이터베이스 보안 정책을 추가합니다.

    postgresql.conf 파일 내부 내용 중
    
    ...
    
    #shared_preload_libraries = ''  # (change requires restart)  <= 이 라인을 아래와 같이 수정
    shared_preload_libraries = 'dbms_rls'
    (이때, 라인의 맨 앞 '#' 문자도 반드시 제거해줍니다)
    shared_preload_libraries = 'a,b' <- 이미 a,b extension들이 추가되어있을 경우, 이어서 dbms_rls를 추가합니다.
    => shared_preload_libraries = 'a,b,dbms_rls'
    DBMS_RLS.ADD_POLICY
    (
        object_schema              IN text    DEFAULT NULL,
        object_name                IN text,
        policy_name                IN text,
        function_schema            IN text    DEFAULT NULL,
        policy_function            IN text,
        statement_types            IN text    DEFAULT NULL,
        update_check               IN BOOLEAN DEFAULT FALSE,
        enable                     IN BOOLEAN DEFAULT TRUE,
        static_policy              IN BOOLEAN DEFAULT FALSE,
        policy_type                IN INTEGER DEFAULT NULL,
        long_predicate             IN BOOLEAN DEFAULT FALSE,
        sec_relevant_cols          IN text    DEFAULT NULL,
        sec_relevant_cols_opt      IN INTEGER DEFAULT NULL
    );
    CALL dbms_rls.add_policy
    (
        object_name => 'employees_rls_test',
        policy_name => 'salary_policy',
        policy_function => 'salary_policy_func_rls_test'
    );
    DBMS_RLS.DROP_POLICY 
    (
        object_schema              IN text DEFAULT NULL,
        object_name                IN text,
        policy_name                IN text
    );
    CALL dbms_rls.drop_policy
    (
        object_name => 'employees_rls_test',
        policy_name => 'salary_policy'
    );
    DBMS_RLS.ENABLE_POLICY 
    (
        object_schema              IN text    DEFAULT NULL,
        object_name                IN text,
        policy_name                IN text,
        enable                     IN BOOLEAN DEFAULT TRUE
    );
    CALL dbms_rls.enable_policy
    (
        object_name => 'employees_rls_test',
        policy_name => 'context_policy',
        enable => true
    );

    설치 설정

    shared_preload_libraries

    구성

    ADD_POLICY

    프로토타입

    파라미터

    예제

    DROP_POLICY

    프로토타입

    파라미터

    예제

    ENABLE_POLICY

    프로토타입

    파라미터

    예제

    DBMS_PIPE

    DBMS_PIPE은 동일한 인스턴스 내에 속해 있는 세션들 간에 통신할 수 있는 기능을 지원하는 패키지입니다.

    함수 / 프로시저
    반환 타입
    설명

    timeout

    얼마나 기다릴지 설정하는 값입니다. (단위: seconds)

    timeout

    얼마나 기다릴지 설정하는 값입니다. (단위: seconds)

    function_schema

    조건문 생성 함수의 스키마입니다.

    policy_function

    조건문 생성 함수의 이름입니다.

    statement_types

    정책을 적용할 SQL 문의 유형입니다.SELECT, INSERT, UPDATE, DELETE의 조합을 명시할 수 있습니다. 기본값은 INSERT를 제외한 모든 유형입니다.

    update_check

    INSERT, UPDATE일 경우에 적용됩니다.TRUE일 경우 새로 insert되거나 update된 값이 정책의 조건문을 만족하는지 검사합니다. 기본값은 FALSE입니다.

    enable

    정책을 추가함과 동시에 활성화시킬지 명시합니다. 기본값은 TRUE입니다.

    static_policy

    기본값은 false 이며, OpenSQL에서는 static_policy 설정이 무시됩니다.

    policy_type

    기본값은 NULL이며, OpenSQL에서는 policy_type 설정이 무시됩니다.

    long_predicate

    기본값은 false 이며, OpenSQL에서는 long_predicate 설정이 무시됩니다.

    sec_relevant_cols

    컬럼 레벨 VPD 기능을 활성화합니다. 쿼리에서 해당 변수로 들어온 컬럼이 참조될 때만 정책이 적용합니다. 정책이 적용될 컬럼 이름을 쉼표 또는 공백으로 구분하여 나열합니다. 명시하지 않으면 모든 컬럼에 대해 적용합니다.

    sec_relevant_cols_opt

    기본값은 NULL이며, OpenSQL에서는 sec_relevant_cols_opt 설정이 무시됩니다.

    enable

    - TRUE : 정책을 활성화합니다. 기본값에 해당됩니다. - FALSE : 정책을 비활성화합니다.

    INTEGER

    로컬 메시지 버퍼에 저장되어 있는 다음 아이템의 데이터 타입을 알려주는 함수입니다.

    PACK_MESSAGE(item)

    n/a

    로컬 메시지 버퍼 안에서 메시지를 만드는 프로시저입니다. 이 프로시저를 호출하여 로컬 버퍼에 단위 데이터(아이템)를 저장하고, 1개 이상의 아이템이 저장되면 SEND_MESSAGE합니다.

    PURGE(pipename)

    n/a

    파이프에 저장되어 있는 모든 내용을 비우는 프로시저입니다.

    RECEIVE_MESSAGE(pipename [, timeout ])

    INTEGER

    파이프에 저장되어 있는 메시지 한 개를 로컬 버퍼에 읽어오는 함수입니다.

    REMOVE_PIPE(pipename)

    INTEGER

    명시적으로 생성된 파이프 및 파이프에 저장되어 있던 모든 내용을 제거하는 함수입니다.

    RESET_BUFFER

    n/a

    로컬에 있는 읽기 버퍼 및 쓰기 버퍼의 모든 내용을 비우는 프로시저입니다.

    SEND_MESSAGE(pipename [, timeout ] [, maxpipesize ])

    INTEGER

    로컬 버퍼에 저장되어 있던 메시지를 파이프에 저장하는 함수입니다.

    UNIQUE_SESSION_NAME

    TEXT

    데이터베이스에 연결되어 있는 모든 세션들 중에 식별할 수 있는 유일한 이름을 반환하는 함수입니다.

    UNPACK_MESSAGE(item OUT)

    n/a

    로컬 메시지 버퍼 안에 저장되어 있는 아이템 하나를 읽어오는 프로시저입니다.


    설치는 super user에 이루어져야 하고 public으로 공개되어 있습니다.


    본 절에서는 DBMS_PIPE 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명합니다.

    명시적으로 공개 또는 사용자 소유의 통신용 파이프를 생성하는 함수입니다.

    파라미터
    설명

    pipename

    생성하는 파이프의 이름으로 인스턴스 내에서 고유한 값입니다. SEND_MESSAGE, RECEIVE_MESSAGE를 호출할 때 이 이름을 사용하여 송수신할 수 있습니다.

    maxpipesize

    메시지들을 파이프에 저장할 수 있는 최대 크기입니다. (기본값: 8192Bytes)

    private

    • TRUE : 사용자 소유의 파이프가 생성됩니다. (기본값)

    • FALSE : 모든 사용자가 공유하는 파이프가 생성됩니다.

    로컬 메시지 버퍼에 저장되어 있는 다음 아이템의 데이터 타입을 알려주는 함수입니다. RECEIVE_MESSAGE를 호출하여 로컬 버퍼에 가져온 다음 NEXT_ITEM_TYPE을 호출하고 반환된 타입에 맞는 UNPACK_MESSAGE 프로시저를 호출하여 데이터를 읽어올 수 있습니다.

    로컬 메시지 버퍼 안에서 메시지를 만드는 프로시저입니다. 이 프로시저를 호출하여 로컬 버퍼에 단위 데이터(아이템)를 저장하고, 1개 이상의 아이템이 저장되면 SEND_MESSAGE 함수를 호출하여 하나의 메시지로 합쳐서 파이프에 보낼 수 있습니다.

    파라미터
    설명

    item

    로컬 버퍼에 저장할 아이템입니다.

    파이프에 저장되어 있는 모든 내용을 비우는 프로시저입니다.

    파라미터
    설명

    pipename

    저장된 모든 메시지를 비울 파이프의 이름입니다.

    파이프에 저장되어 있는 메시지 한 개를 로컬 버퍼에 읽어오는 함수입니다.

    파라미터
    설명

    pipename

    저장된 메시지를 읽어올 파이프의 이름입니다.

    timeout

    메시지를 기다릴 시간을 초 단위로 설정합니다.

    (기본값: MAXWAIT, 86400000(1000일))

    명시적으로 생성된 파이프 및 파이프에 저장되어 있던 모든 내용을 제거하는 함수입니다. 단, 이 함수를 호출하지 않고 인스턴스가 종료되어도 파이프는 제거됩니다.

    파이프가 제거되는 경우 0을 반환합니다. 이미 제거된 파이프에 대해서 해당 함수를 호출한 경우에도 0을 반환합니다.

    파라미터
    설명

    pipename

    제거하려는 파이프의 이름입니다.

    로컬에 있는 읽기 버퍼 및 쓰기 버퍼의 모든 내용을 비우는 프로시저입니다. 새로운 파이프에 대한 읽기 및 쓰기를 위해 현재 로컬에 남아 있는 메시지를 비울 때 사용할 수 있습니다.

    로컬 버퍼에 저장되어 있던 메시지를 파이프에 저장하는 함수입니다. PACK_MESSAGE를 한 번 이상 호출하여 누적된 아이템들이 하나의 메시지로 구성되어 전송됩니다. 존재하지 않는 파이프의 이름이 인자로 들어오는 경우, 묵시적으로 private 파이프를 생성합니다.

    파라미터
    설명

    pipename

    메시지를 송신할 파이프의 이름입니다.

    timeout

    메시지를 기다릴 시간을 초 단위로 설정합니다.(기본값: MAXWAIT, 86400000(1000일))

    maxpipesize

    Byte 단위이며, 파이프에 해당 메시지를 보낼 때 사용가능한 최대 크기입니다. 최대 사이즈를 초과하는 경우, 메시지를 파이프에 쓰지 못합니다.(기본값: 8192Bytes)

    데이터베이스에 연결되어 있는 모든 세션들 중에 식별할 수 있는 유일한 이름을 반환하는 함수입니다. 동일한 세션에서 이 함수를 호출할 때마다 항상 같은 값을 반환하며, 이 함수를 이용해 자신 세션 안에서만 사용할 수 있는 파이프의 이름을 지정할 수 있습니다.

    로컬 메시지 버퍼 안에 저장되어 있는 아이템 하나를 읽어오는 프로시저입니다. RECEIVE_MESSAGE 함수를 호출하여 파이프로부터 읽어온 메시지를 로컬 읽기 버퍼에 저장하고, UNPACK_MESSAGE 프로시저를 호출하여 메시지 안의 아이템들을 하나씩 가져올 수 있습니다.

    파라미터
    설명

    item

    로컬 버퍼에서 읽어올 아이템입니다.

    CREATE_PIPE(pipename [, maxpipesize ] [, private ])

    INTEGER

    명시적으로 공개 또는 사용자 소유의 통신용 파이프를 생성하는 함수입니다.

    개요

    NEXT_ITEM_TYPE

    권한

    구성

    CREATE_PIPE

    프로토타입

    파라미터

    예제

    NEXT_ITEM_TYPE

    프로토타입

    예제

    PACK_MESSAGE

    프로토타입

    파라미터

    예제

    PURGE

    프로토타입

    파라미터

    예제

    RECEIVE_MESSAGE

    프로토타입

    파라미터

    예제

    REMOVE_PIPE

    프로토타입

    파라미터

    예제

    RESET_BUFFER

    프로토타입

    예제

    SEND_MESSAGE

    프로토타입

    파라미터

    예제

    UNIQUE_SESSION_NAME

    프로토타입

    예제

    UNPACK_MESSAGE

    프로토타입

    파라미터

    예제

    DBMS_PIPE.CREATE_PIPE 
    (
        pipename        IN  TEXT,
        maxpipesize     IN  INTEGER     DEFAULT 8192,
        private         IN  BOOLEAN     DEFAULT TRUE
    ) 
    RETURN INTEGER;
    SELECT DBMS_PIPE.CREATE_PIPE('tbpipe', 1000, false);                        
    DBMS_PIPE.NEXT_ITEM_TYPE()
    RETURN PLS_INTEGER;
    type := DBMS_PIPE.NEXT_ITEM_TYPE;
    DBMS_PIPE.PACK_MESSAGE (item  IN  TEXT);
    DBMS_PIPE.PACK_MESSAGE (item  IN  TIMESTAMP);
    DBMS_PIPE.PACK_MESSAGE (item  IN  NUMERIC);
    DBMS_PIPE.PACK_MESSAGE (item  IN  BYTEA);
    CALL DBMS_PIPE.PACK_MESSAGE('abc');
    DBMS_PIPE.PURGE 
    (
        pipename     IN  TEXT
    );
    CALL DBMS_PIPE.PURGE('tbpipe');
    DBMS_PIPE.RECEIVE_MESSAGE 
    (
        pipename        IN      TEXT,
        timeout         IN      INTEGER DEFAULT MAXWAIT
    ) 
    RETURN INTEGER;
    status := DBMS_PIPE.RECEIVE_MESSAGE('tbpipe');
    DBMS_PIPE.REMOVE_PIPE 
    (
        pipename    IN      TEXT
    ) 
    RETURN INTEGER;
    status := DBMS_PIPE.REMOVE_PIPE('tbpipe');                        
    DBMS_PIPE.RESET_BUFFER();
    CALL DBMS_PIPE.RESET_BUFFER();
    DBMS_PIPE.SEND_MESSAGE 
    (
        pipename        IN      TEXT,
        timeout         IN      INTEGER DEFAULT MAXWAIT,
        maxpipesize     IN      INTEGER DEFAULT 8192
    ) 
    RETURN INTEGER;
    status := DBMS_PIPE.SEND_MESSAGE('tbpipe');
    DBMS_PIPE.UNIQUE_SESSION_NAME()
    RETURN TEXT;
    text := DBMS_PIPE.UNIQUE_SESSION_NAME();
    DBMS_PIPE.UNPACK_MESSAGE(item  OUT TEXT);
    DBMS_PIPE.UNPACK_MESSAGE(item  OUT TIMESTAMP);
    DBMS_PIPE.UNPACK_MESSAGE(item  OUT NUMERIC);
    DBMS_PIPE.UNPACK_MESSAGE(item  OUT BYTEA);
    CALL DBMS_PIPE.UNPACK_MESSAGE(msg);

    DBMS_ASSERT

    개요

    DBMS_ASSERT 패키지는 사용자 입력 문자열을 SQL에서 안전하게 사용하기 위해 유효성을 검증하거나 리터럴, 식별자, 객체명을 안전하게 감싸는 유틸리티 함수들을 제공합니다. 이 패키지는 SQL Injection 방지를 위해 자주 사용되며, Oracle과의 호환성을 고려하여 PostgreSQL 확장으로 구현되었습니다.

    함수
    반환 타입
    설명

    ENQUOTE_LITERAL

    TEXT


    설치는 super user에 이루어져야 하고 관리자가 DBMS_ASSERT 스키마 접근 권한 부여한 유저만 접근 가능합니다.


    입력된 문자열을 SQL 리터럴로 안전하게 감싸기 위해 작은따옴표(')로 감싸고, 내부에 존재하는 모든 작은따옴표를 이중 작은따옴표('')로 escape 합니다.

    빈 문자열이나 NULL을 입력하면 빈 문자열을 작은 따옴표로 감싼 문자열’’을 반환합니다.

    파라미터
    설명

    입력된 식별자(name)를 SQL 식별자 형식(큰따옴표”)으로 감싸는 함수입니다. 대문자로 일괄 변환할지 여부를 선택할 수 있으며, 기본값은 변환(true)이다. false를 입력하면 입력받은 문자열의 대소문자를 그대로 보존합니다.

    빈 문자열이나 NULL을 입력하면 빈 문자열을 큰 따옴표로 감싼 문자열””을 반환합니다.

    파라미터
    설명

    입력 문자열을 아무런 검증 없이 그대로 반환하는 함수입니다. 단순히 DBMS_ASSERT 인터페이스의 형태를 맞추기 위한 pass-through 함수로 사용됩니다.

    파라미터
    설명

    입력된 문자열이 유효한 정규 SQL 식별자(schema.object, pkg.proc, a.b.c, ...) 형식인지 검증합니다. Oracle에서는 큰따옴표를 포함한 식별자가 허용되지 않지만, PostgreSQL에서는 큰따옴표(")로 감싼 유효 식별자도 허용합니다.

    • 각 이름은 일반 이름 또는 큰따옴표로 감싼 이름 가능합니다.

    • 이름 내에는 _, $, # 허용합니다.

    • 큰따옴표 내의 "는 ""로 escape 되어야 합니다.

    파라미터
    설명
    유형
    허용
    예시

    입력된 문자열이 현재 데이터베이스 내에 존재하는 스키마 이름인지 검증합니다. 존재하지 않을 경우 예외를 발생시킵니다.

    파라미터
    설명

    입력 문자열이 SQL의 단순 식별자(SIMPLE SQL NAME) 규칙에 부합하는지 검증합니다. Oracle에서는 알파벳, 숫자, _, $, # 문자만 허용되며, PostgreSQL에서는 큰따옴표로 감싼 식별자도 지원합니다.

    • 일반 식별자: ASCII 알파벳으로 시작하고, 나머지 문자는 [a-zA-Z0-9_$#]만 허용합니다.

    • 큰따옴표로 감싸인 식별자도 허용하며, 이 경우 내부의 "는 ""로 이스케이프된 형태여야 합니다.

    • 빈문자열‘‘

    파라미터
    설명
    유형
    허용
    예시

    입력된 문자열이 현재 데이터베이스에 존재하는 유효한 SQL 객체 이름(예: 테이블, 뷰, 시퀀스, 함수 등)인지 확인합니다.

    • "스키마"."객체" 형태 또는 스키마.객체 형태 모두 지원합니다.

    • 존재하지 않는 객체명이나 큰 따옴표로 감쌌을 경우 대소문자 일치 실패 시 예외를 발생시킵니다.

    • 빈 문자열, NULL 값 허용되지 않습니다.

    입력 문자열이 데이터베이스 내 존재하는 객체 이름인지 검증합니다.어떤 종류의 객체(function, table, view, 등)에 대해 어떤 기준으로 확인하는지는 구현 기반 설명이 필요합니다.

    파라미터
    설명
    유형
    허용 여부
    설명

    빈문자열‘‘ 및 NULL 값은 허용되지 않으며 예외 발생합니다.

    특수문자 _, $, #

    ✅

    a.b$.c_."d#d"

    잘못된 문자 포함

    ❌

    %, !, &, ...

    숫자로 시작

    ❌

    1broken

    NULL 입력

    ❌

    NULL

    및
    NULL
    값은 허용되지 않으며 예외 발생합니다.

    숫자로 시작

    ❌

    1invalid

    특수문자 시작

    ❌

    -badname

    NULL 입력

    ❌

    NULL

    내부 공백 및 허용 특수문자

    ✅

    "Aaa d$g#h_h shsh"

    큰따옴표 감싼 정확한 식별자

    ✅

    "pg_catalog"."pg_class"

    대소문자 틀린 큰따옴표 식별자

    ❌

    "pg_CAtaLOg"."PG_class"

    존재하지 않는 객체

    ❌

    dbms_assert.fooo

    빈 문자열 / NULL

    ❌

    '', NULL

    입력 문자열을 작은따옴표로 감싸는 함수입니다.

    ENQUOTE_NAME

    TEXT

    입력 문자열을 큰따옴표로 감싸는 함수입니다.

    NOOP

    TEXT

    입력 문자열을 그대로 반환하는 함수입니다.

    QUALIFIED_SQL_NAME

    TEXT

    입력 문자열이 유효한 정규 SQL 식별자인지 검증하는 함수입니다.

    SCHEMA_NAME

    TEXT

    입력 문자열이 현재 데이터베이스에 존재하는 스키마 이름인지 검증하는 함수입니다.

    SIMPLE_SQL_NAME

    TEXT

    입력 문자열이 단순 SQL 식별자인지 검증하는 함수입니다.

    SQL_OBJECT_NAME

    TEXT

    입력 문자열이 유효한 객체 이름인지 검증하는 함수입니다.

    str

    작은따옴표로 감쌀 입력 문자열입니다.

    str

    큰따옴표로 감쌀 입력 문자열입니다.

    capitalize

    대문자로 일괄 변환할 지 여부입니다; false 입력시 입력 문자열의 대소문자 그대로 유지합니다.

    str

    입력 문자열입니다.

    str

    입력 문자열입니다.

    점(.)으로 구분된 다단계 이름

    ✅

    aaa.bbb.ccc.ddd

    큰따옴표 식별자 포함

    ✅

    aaa.bbb."ccc.dd"

    str

    입력 문자열입니다.

    str

    입력 문자열입니다.

    영문자로 시작하는 이름

    ✅

    valid_name

    큰따옴표 감싼 식별자

    ✅

    "Aaa dg""hh shsh"

    str

    입력 문자열입니다.

    존재하는 객체 이름

    ✅

    pg_catalog.pg_class

    대소문자 무시 식별자

    ✅

    pg_CAtalog.pG_CLaSS

    권한

    구성

    ENQUOTE_LITERAL

    프로토타입

    파라미터

    예제

    ENQUOTE_NAME

    프로토타입

    파라미터

    예제

    참고

    • 작은 따옴표 '는 큰 따옴표 " 와 달리 문자열에 나타날 수 있습니다. 연속된 두 개의 작은 따옴표에서 첫 번째 작은 따옴표는 두 번째 작은 따옴표를 escape한다. POSIX에서의 백슬래시 \ 와 같은 방식입니다.

    • 대문자 변환 수행 시, 영어 알파벳(a to z, A to Z)과 로컬 로케일 기반의 8비트 확장 문자셋(라틴어 문자 등)에 대해서만 대문자변경을 수행합니다.

    NOOP

    프로토타입

    파라미터

    예제

    QUALIFIED_SQL_NAME

    프로토타입

    파라미터

    동작 규칙 요약

    예제

    SCHEMA_NAME

    프로토타입

    파라미터

    예제

    SIMPLE_SQL_NAME

    프로토타입

    파라미터

    동작 규칙 요약

    예제

    SQL_OBJECT_NAME

    프로토타입

    파라미터

    동작 규칙 요약

    예제

    CREATE EXTENSION dbms_assert;
    dbms_assert.enquote_literal(str TEXT) RETURNS TEXT
    SELECT dbms_assert.enquote_literal('O''''Reilly'); -- [O''Reilly] 라는 문자열을 입력
    -- 결과: 'O''''Reilly'
    
    SELECT dbms_assert.enquote_literal('');
    -- 결과: ''
    
    SELECT dbms_assert.enquote_literal(NULL);
    -- 결과: ''
    dbms_assert.enquote_name(str TEXT, capitalize BOOLEAN DEFAULT TRUE) RETURNS TEXT
    SELECT dbms_assert.enquote_name('TableName');
    -- 결과: "TABLENAME"
    
    SELECT dbms_assert.enquote_name('TableName', false);
    -- 결과: "TableName"
    
    SELECT dbms_assert.enquote_name('');
    -- 결과: ""
    dbms_assert.noop(str TEXT) RETURNS TEXT
    SELECT dbms_assert.noop('test_input');
    -- 결과: 'test_input'
    
    SELECT dbms_assert.noop('');
    -- 결과: ''
    
    SELECT dbms_assert.noop(null);
    -- 결과: null
    dbms_assert.qualified_sql_name(str TEXT) RETURNS TEXT
    -- 정상 케이스
    SELECT dbms_assert.qualified_sql_name('aaa.bbb.ccc."aaaa""aaa"');
    -- 결과: aaa.bbb.ccc."aaaa""aaa"
    
    -- 정상 케이스
    SELECT dbms_assert.qualified_sql_name('aaa.e$.s_."aa##aa""aaa"');
    -- 결과: aaa.e$.s_."aa##aa""aaa"
    
    -- 예외: 특수문자 %
    SELECT dbms_assert.qualified_sql_name('aaa.bbb.cc%c."aaaa""aaa"');
    -- ERROR: string is not qualified SQL name
    
    -- 예외: 숫자로 시작
    SELECT dbms_assert.qualified_sql_name('1broken');
    -- ERROR: string is not qualified SQL name
    
    -- 예외: NULL 입력
    SELECT dbms_assert.qualified_sql_name(NULL);
    -- ERROR: string is not qualified SQL name
    dbms_assert.schema_name(str TEXT) RETURNS TEXT
    SELECT dbms_assert.schema_name('pg_catalog'); -- OK
    
    SELECT dbms_assert.schema_name('not_exist_schema'); -- 예외 발생
    dbms_assert.simple_sql_name(str TEXT) RETURNS TEXT
    -- 정상 케이스
    SELECT dbms_assert.simple_sql_name('"Aaa d$g#h_h shsh"');
    -- 결과: "Aaa d$g#h_h shsh"
    
    -- 정상 케이스
    SELECT dbms_assert.simple_sql_name('valid_name');
    -- 결과: valid_name
    
    -- 정상 케이스
    SELECT dbms_assert.simple_sql_name('"as""df"');
    -- 결과: "as""df"
    
    -- 예외 발생: 비허용 문자 포함
    SELECT dbms_assert.simple_sql_name('ajajaj -- ajaj');
    -- ERROR: string is not simple SQL name
    
    -- 예외 발생: 숫자로 시작
    SELECT dbms_assert.simple_sql_name('1broken');
    -- ERROR: string is not simple SQL name
    
    -- 예외 발생: NULL 입력
    SELECT dbms_assert.simple_sql_name(NULL);
    -- ERROR: string is not simple SQL name
    dbms_assert.sql_object_name(str TEXT) RETURNS TEXT
    -- 존재하는 객체 (대소문자 무관)
    SELECT dbms_assert.sql_object_name('pg_catalog.pg_class');
    -- 결과: pg_catalog.pg_class
    
    -- 존재하는 객체 (대소문자 무관)
    SELECT dbms_assert.sql_object_name('pg_CAtalog.pG_CLaSS');
    -- 결과: pg_CAtalog.pG_CLaSS
    
    -- 대소문자 구분 명시 (큰따옴표 사용)
    SELECT dbms_assert.sql_object_name('"pg_catalog"."pg_class"');
    -- 결과: "pg_catalog"."pg_class"
    
    -- ❌ 예외: 대소문자 틀림
    SELECT dbms_assert.sql_object_name('"pg_CAtaLOg"."PG_class"');
    -- ERROR: invalid object name
    
    -- ❌ 예외: 존재하지 않는 객체
    SELECT dbms_assert.sql_object_name('dbms_assert.fooo');
    -- ERROR: invalid object name
    
    -- ❌ 예외: 빈 문자열
    SELECT dbms_assert.sql_object_name('');
    -- ERROR: invalid object name
    
    -- ❌ 예외: NULL 입력
    SELECT dbms_assert.sql_object_name(NULL);
    -- ERROR: invalid object name

    UTL_FILE

    UTL_FILE은 OS 파일 시스템에 파일을 읽거나 씁니다.

    함수 / 프로시저
    반환 타입
    설명

    VOID

    현재 세션에 열린 모든 파일을 닫는 함수입니다.

    FCOPY

    VOID

    파일의 연속되는 부분을 새로 생성된 파일에 복사하는 함수입니다.

    FFLUSH

    VOID

    아직 파일에 쓰지 않고 버퍼에 남아 있는 데이터를 파일에 쓰는 함수입니다.

    FGETATTR

    n/a

    디스크 파일의 속성을 반환하는 함수입니다.

    FOPEN

    UTL_FILE.FILE_TYPE

    파일을 여는 함수입니다.

    FREMOVE

    VOID

    파일을 삭제하는 함수입니다.

    FRENAME

    VOID

    파일 이름을 변경하는 함수입니다.

    GET_LINE

    n/a

    파일 텍스트 내 한 줄을 읽어오는 함수입니다.

    IS_OPEN

    BOOLEAN

    파일이 열려있는지 확인하는 함수입니다.

    NEW_LINE

    BOOLEAN

    파일 내 줄 띄어쓰기를 삽입하는 함수입니다.

    PUT

    BOOLEAN

    파일에 문자열을 넣는 함수입니다.

    PUT_LINE

    BOOLEAN

    파일에 한 줄의 문자열을 넣는 함수입니다.

    PUTF

    BOOLEAN

    formatted string을 넣는 함수입니다.


    설치는 super user에 이루어져야 하고 public으로 공개되어 있습니다.

    Tablespace에 대한 접근 권한이 있어야 파일 생성/읽기/쓰기가 가능합니다.


    본 절에서는 UTL_FILE 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명합니다.

    파일을 닫는 함수입니다.

    파라미터
    설명

    file

    파일 핸들입니다.

    현재 세션에 열린 모든 파일을 닫는 함수입니다.

    파일의 연속되는 부분을 새로 생성된 파일에 복사하는 함수입니다.

    파라미터
    설명

    src_location

    복사를 진행할 대상 파일이 위치할 경로의 디렉터리명입니다.

    src_filename

    복사를 진행할 대상 파일의 이름입니다.

    dest_location

    복사가 진행된 이후 파일이 위치할 경로의 디렉터리명입니다.

    아직 파일에 쓰지 않고 버퍼에 남아 있는 데이터를 파일에 쓰는 함수입니다. 데이터는 반드시 EOL 문자로 끝나야 합니다.

    파라미터
    설명

    file

    파일 핸들러 입니다.

    디스크 파일의 속성을 반환하는 함수입니다.

    파라미터
    설명

    location

    파일의 경로를 나타내는 디렉터리명입니다.

    filename

    파일의 이름입니다.

    fexists

    파일의 존재 여부입니다.

    파일을 여는 함수입니다. 성공하면 파일 핸들러값을 반환합니다.

    파라미터
    설명

    location

    파일의 경로를 나타내는 디렉터리명입니다.

    filename

    파일의 이름입니다.

    open_mode

    파일 모드입니다. 파일 모드의 종류는 다음과 같습니다.

    • r : 읽기 텍스트 모드

    • w : 쓰기 텍스트 모드.

    • a : 추가 텍스트 모드

    파일을 삭제하는 함수입니다. 파일 삭제에 실패한 경우 UTL_FILE_INVALID_PATH 혹은 UTL_FILE_INVALID_OPERATION exception이 발생합니다.

    파라미터
    설명

    location

    파일의 위치를 나타내는 디렉터리명입니다.

    filename

    파일의 이름입니다.

    파일의 이름을 변경하는 함수입니다. OS 셸에서 사용하는 mv 명령어와 동일하게 동작합니다.

    파라미터
    설명

    location

    원본 파일의 경로를 나타내는 디렉터리명입니다.

    filename

    원본 파일의 이름입니다.

    dest_dir

    변경된 파일의 경로를 나타내는 디렉터리명입니다.

    EOL 문자 또는 파일이 끝날 때까지의 내용을 읽어 오는 함수입니다. FOPEN 함수에서 지정한 max_linesize 이상을 읽어 올 수 없습니다.

    파라미터
    설명

    file

    파일 핸들러입니다.

    buffer

    읽어 온 데이터입니다.

    len

    파일로부터 읽어 올 Byte의 크기입니다.(기본값: NULL, NULL인 경우 max_linesize 값을 갖습니다.)

    파일 핸들러를 통해 파일이 열려 있는지 검사하는 함수입니다. 파일이 열려있는 경우 TRUE를 반환하고, 그렇지 않은 경우 FALSE를 반환합니다.

    파라미터
    설명

    file

    파일 핸들러입니다.

    파일에 하나 이상의 EOL 문자를 넣는 함수입니다.

    파라미터
    설명

    file

    파일 핸들러입니다.

    lines

    파일에 넣을 EOL 문자의 개수입니다.

    파일에 문자열을 넣을 때 사용하는 함수입니다.

    파라미터
    설명

    file

    파일 핸들러입니다.

    buffer

    파일에 쓸 내용입니다. 파일이 w(쓰기 텍스트)나 a(추가 텍스트) 모드로 열리지 않은 경우 UTL_FILE_INVALID_OPERATION exception이 발생합니다.

    한 줄의 텍스트를 파일에 쓰는 함수입니다. 이때 라인은 플랫폼에 종속적인 EOL 문자로 끝냅니다.

    파라미터
    설명

    file

    파일 핸들러입니다.

    buffer

    파일에 쓸 라인입니다.

    autoflush

    쓰기를 한 후 출력 버퍼를 비울지 여부를 결정합니다.

    • TRUE : 버퍼를 비웁니다.

    • FALSE : 기본값으로 버퍼를 비우지 않는니다.

    형식화된 PUT 함수입니다. PUTF의 형식화된 문자열은 C언어에서 표준 입출력(standard I/O)의 fprintf에서의 형식화된 문자열과 동일하게 %s와 이스케이프 문자를 포함합니다. 이스케이프 문자로 \n을 사용할 수 있으며 %s는 그 뒤에 나오는 인수 문자열을 대체합니다.

    예를 들어 다음과 같은 세 개의 인수가 있다고 가정하면,

    위의 세 개의 인수를 사용하는 형식화된 문자열은 다음과 같다니.

    또한 위의 내용이 실행되면 다음과 같은 내용이 출력됩니다.

    파라미터
    설명

    file

    파일 핸들러입니다.

    format

    %s와 이스케이프 문자(\n)를 포함하는 형식화된 문자열입니다.

    arg1-5

    %s에 대체되는 선택할 수 있는 문자열입니다.(기본값: NULL)

    FCLOSE

    UTL_FILE.FILE_TYPE

    파일을 닫는 함수입니다.

    개요

    FCLOSE_ALL

    FCLOSE(file IN UTL_FILE.FILE_TYPE)
    RETURNS UTL_FILE.FILE_TYPE;
    x := UTL_FILE.CLOSE(22);
    FCLOSE_ALL()
    RETURNS VOID
    PERFORM UTL_FILE.FCLOSE_ALL();
    FCOPY(src_location TEXT, src_filename TEXT, dest_location TEXT, dest_filename TEXT)
    RETURNS VOID
    
    FCOPY(src_location TEXT, src_filename TEXT, dest_location TEXT, dest_filename TEXT, start_line INTEGER)
    RETURNS VOID
    
    FCOPY(src_location TEXT, src_filename TEXT, dest_location TEXT, dest_filename TEXT, start_line INTEGER, end_line INTEGER)
    RETURNS VOID
    SELECT utl_file.fcopy('test', 'fcopy_test.txt', 'test2', 'fcopy_test2.txt')
    FFLUSH(file UTL_FILE.FILE_TYPE)
    RETURNS VOID
    SELECT utl_file.fflush(22);
    FGETATTR(location TEXT, filename TEXT, OUT fexists BOOLEAN, OUT file_length BIGINT, OUT blocksize INTEGER)
    SELECT * from utl_file.fgetattr('test', 'fgetattr_test.txt');
    FOPEN(location TEXT, filename TEXT, open_mode TEXT)
    RETURNS UTL_FILE.FILE_TYPE
    
    FOPEN(location TEXT, filename TEXT, open_mode TEXT, max_linesize INTEGER)
    RETURNS UTL_FILE.FILE_TYPE
    
    FOPEN(location TEXT, filename TEXT, open_mode TEXT, max_linesize INTEGER, encoding NAME)
    RETURNS UTL_FILE.FILE_TYPE
    X := utl_file.fopen('test/tmp/dir', 'sample.txt', 'r');
    FREMOVE(location TEXT, filename TEXT)
    RETURNS VOID
    SELECT utl_file.fremove('test', 'fremove_test.txt');
    frename(location TEXT, filename TEXT, dest_dir TEXT, dest_file TEXT)
    RETURNS VOID
    
    frename(location TEXT, filename TEXT, dest_dir TEXT, dest_file TEXT, overwrite BOOLEAN)
    RETURNS VOID
    SELECT utl_file.frename('test', 'frename_test.txt', 'test', 'frename_test2.txt', true); 
    get_line(file UTL_FILE.FILE_TYPE, OUT buffer TEXT)
    
    get_line(file UTL_FILE.FILE_TYPE, OUT buffer TEXT, len TEXT)
    DO
    $$
    DECLARE
        read_file   utl_file.file_type;
        line TEXT;
        len int := 2;
    BEGIN
        read_file := utl_file.fopen('test', 'read_test.txt', 'r');
        SELECT utl_file.get_line(read_file, len) INTO line;
    END;
    $$;
    IS_OPEN(file UTL_FILE.FILE_TYPE)
    DO
    $$
    DECLARE
        read_file   utl_file.file_type;
        line        TEXT;
        len int := 2;
    BEGIN
        read_file := utl_file.fopen('test', 'read_test.txt', 'r');
    
        WHILE utl_file.is_open(read_file)
        LOOP
            SELECT utl_file.get_line(read_file, len) INTO line;
        END LOOP;
    END;
    $$;
    NEW_LINE(file UTL_FILE.FILE_TYPE)
    RETURNS BOOLEAN
    
    NEW_LINE(file UTL_FILE.FILE_TYPE, lines INTEGER)
    RETURNS BOOLEAN
    DO
    $$
    DECLARE
        ftest utl_file.file_type;
        pgtap_ok text; -- dummy return for pgtap to work inside anon block
    BEGIN
        ftest := utl_file.fopen('test', 'put_test.txt', 'w');
            
        -- Put a new line into a txt file
        PERFORM utl_file.new_line(ftest);
    END;
    $$;
    PUT(file UTL_FILE.FILE_TYPE, buffer TEXT)
    RETURNS BOOLEAN
    DO
    $$
    BEGIN
        PERFORM utl_file.put(utl_file.fopen('test', 'put_test.txt', 'w'), 'ABC ');
    END;
    $$;
    PUT_LINE(file UTL_FILE.FILE_TYPE, buffer TEXT)
    RETURNS BOOLEAN
    
    PUT_LINE(file UTL_FILE.FILE_TYPE, buffer TEXT, autoflush BOOLEAN)
    RETURNS BOOLEAN
    DO
    $$
    BEGIN
        PERFORM utl_file.put_line(utl_file.fopen('test', 'put_test.txt', 'w'), 'ABC ', true);
    END;
    $$;
    arg1 = 'string1'; 
    arg2 = 'string2'; 
    arg3 = 'string3'; 
    utl_file.putf( ofile, 'This is example of formatted string : %s %s %s \n',
                   arg1, arg2, arg3);
    This is example of formated string : string1 string2 string3
    UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT)
    RETURNS BOOLEAN
    
    UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT)
    RETURNS BOOLEAN
    
    UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT, arg2 TEXT)
    RETURNS BOOLEAN
    
    UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT, arg2 TEXT, arg3 TEXT)
    RETURNS BOOLEAN
    
    UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT, arg2 TEXT, arg3 TEXT, arg4 TEXT)
    RETURNS BOOLEAN
    
    UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT, arg2 TEXT, arg3 TEXT, arg4 TEXT, arg5 TEXT)
    RETURNS BOOLEAN
    DO
    $$
    BEGIN
        PERFORM utl_file.putf(utl_file.fopen('test', 'put_test.txt', 'w'), 
                              '[1=%s, 2=%s, 3=%s, 4=%s, 5=%s]', '1', '2', '3', '4', '5');
    END;
    $$;

    권한

    구성

    FCLOSE

    프로토타입

    파라미터

    예제

    FCLOSE_ALL

    프로토타입

    예제

    FCOPY

    프로토타입

    파라미터

    예제

    FFLUSH

    프로토타입

    파라미터

    예제

    FGETATTR

    프로토타입

    파라미터

    예제

    FOPEN

    프로토타입

    파라미터

    예제

    FREMOVE

    프로토타입

    파라미터

    예제

    FRENAME

    프로토타입

    파라미터

    예제

    GET_LINE

    프로토타입

    파라미터

    예제

    IS_OPEN

    프로토타입

    파라미터

    예제

    NEW_LINE

    프로토타입

    파라미터

    예제

    PUT

    프로토타입

    파라미터

    예제

    PUT_LINE

    프로토타입

    파라미터

    예제

    PUTF

    프로토타입

    파라미터

    예제

    dest_filename

    복사가 진행된 이후의 파일의 이름입니다.

    start_line

    복사를 진행할 시작 위치입니다. 파일의 라인 번호를 사용해 명시합니다.(기본값: 1, 파일의 첫 번째 의미)

    end_line

    복사를 끝낼 종료 위치입니다. start_line과 마찬가지로 라인 번호로 명시합니다.(기본값: NULL, 파일의 마지막 라인 의미)

    file_length

    파일의 길이(Byte)입니다.

    blocksize

    파일 시스템의 블록 크기(Byte)입니다.

    max_linesize

    각 라인에 포함되는 byte 수의 최댓값으로 newline 문자를 포함합니다. 최소 1byte에서 최대 32767bytes 입니다. (기본값: 1024bytes)

    dest_file

    변경된 파일의 이름입니다.

    overwrite

    변경된 파일의 이름이 이미 존재할 경우 덮어쓸지를 지정합니다.

    DBMS_JOB

    개요

    DBMS_JOB은 오라클 호환 잡 스케줄링 패키지로, 프로시저 호출 또는 PL/SQL 블록을 일정에 따라 실행합니다.

    내부적으로 o2scheduler 프레임워크를 사용하므로, 사용 전 o2scheduler의 사전 설정과 활성화가 요구됩니다.

    DBMS_JOB에서 필요로 하는 추가 객체들은 dbms_job 스키마 내부에 생성되며, 메타 데이터와 실행 이력은 o2scheduler 스키마의 메타 테이블을 사용합니다.


    제공 프로시져 일람

    프로시저
    설명

    DBMS_JOB을 사용하기 전, 반드시 o2scheduler 를 설치 및 활성화하여야 합니다.

    o2scheduler 설치 관련은 o2scheduler 참조서를 확인합니다.

    o2scheduler 활성화 후 DBMS_JOB을 활성화합니다.

    • 설치 결과

      • 스키마 dbms_job 생성

      • 테이블 dbms_job.broken_job 생성(job의 broken 여부 관리하는 dbms_job 전용 메타테이블)

    DBMS_JOB에는 job 기능을 수행하기 위해 아래의 개념을 정의 및 사용합니다.

    • what

      • job이 수행할 작업을 정의하는 개념이며, 아래같이 2가지 유형으로 존재할 수 있습니다.

        • 프로시저 이름 형식 what: e.g., my_proc

    DBMS_JOB은 내부 동작에서 o2scheduler를 의존하고 있으며, 각 실행이력과 생성/수정되는 job 정보는 다음처럼 저장됩니다.

    • 이력: o2scheduler.job_run_details

    • 다음 실행 예정 시각: o2scheduler.job

    DBMS_JOB은 job 수행 실패 시 해당 job의 실패 카운트를 누적합니다.

    해당 job이 총 10회 이상 실패 시 해당 job을 broken 상태로 자동 갱신하여 더이상 job이 반복 실행되지 않도록 비활성화합니다.

    새로운 작업을 등록하고 스케줄링합니다. 저장된 프로시저를 호출하거나 PL/SQL 블록을 지정된 시각에 실행하도록 예약합니다.

    파라미터
    타입
    기본값
    설명

    지정된 작업을 논리적으로 삭제(soft delete)합니다.

    작업이 완전히 제거되지 않고 비활성화 상태가 되어 이후 스케줄링되지 않습니다.

    • 어떤 job이었는지 history 확인을 위한 의도로써 soft delete 만 수행합니다.

    • hard delete를 위해서는 o2scheduler.job 테이블에 해당 job을 직접 delete 해야하며, 이때 다른 job을 지우지 않도록 유의해야 합니다.

    파라미터
    타입
    설명

    기존 작업의 실행 내용을 변경합니다.

    프로시저명 또는 PL/SQL 블록을 새로운 내용으로 교체합니다.

    파라미터
    타입
    설명

    작업의 상태와 관계없이 즉시 실행합니다.

    broken 상태의 작업도 강제로 실행합니다.

    run한 job은 내부 동작에 의해 다음 실행시각이 now로 갱신되어 실행됩니다.

    파라미터
    타입
    설명

    작업의 다음 실행 시각을 변경합니다.

    next_date에 NULL 지정 시 스케줄링을 비활성화합니다.

    파라미터
    타입
    설명

    작업의 반복 주기를 변경합니다.

    interval에 NULL 지정 시 일회성 작업으로 변경됩니다.

    파라미터
    타입
    설명

    작업의 여러 속성을 한 번에 변경합니다.

    NULL로 지정된 파라미터는 기존 값을 유지합니다.

    파라미터
    타입
    기본값
    설명

    job을 broken 또는 not broken 상태로 갱신합니다.

    broken상태의 job은 비활성화되어 실행되지 않으며, DBMS_JOB.RUN 프로시저를 통해 강제 실행할 수 있습니다.

    파라미터
    타입
    기본값
    설명

    job이 수행해야 할 what이 1개의 단어로만 구성된 스트링이면 프로시저 이름으로, 2개 이상의 단어로 구성되어있으면 PL/SQL 블록으로 what을 인식합니다.

    예시

    • my_proc → stored_procedure

    • BEGIN my_proc(); END; → plsql_block


    dbms_job.failure_threshold

    • 설명: 연속 실행 실패 허용 최대치. 초과 시 잡을 비활성화(broken 상태)로 자동 갱신합니다.

    • 기본값: 10, 최소 3, 최대 20

    • 적용 범위: SIGHUP(설정 변경 후 pg_ctl reload 또는 SIGHUP 필요), superuser만 변경 가능합니다

    예

    job 실행 실패 시, dbms_job.broken_job 테이블에서 관리하는 해당 job의 failed_count가 증가되고, 임계치(dbms_job.failure_threshold) 초과 시 해당 job이 비활성화됩니다.


    • BGW가 충분히 동작할 수 있도록 max_worker_processes를 워크로드 기준으로 튜닝해야 합니다.

    • 스케줄 표현식은 가능하면 의미가 분명한 형태 사용해야 합니다.(예: SYSDATE+1/24, now() + interval '1 minute')

    • 제출 직후 테이블 상태만 확인하는 경우 하나의 트랜잭션에서 ROLLBACK해도 무방하지만, 실제 실행/이력 확인 테스트는 COMMIT 이후에 이루어져야 BGW가 잡을 집계할 수 있습니다.

    • CREATE EXTENSION o2scheduler;가 해당 DB에 적용되어 있는가?

    • shared_preload_libraries에 o2scheduler가 포함되고 서버를 재기동했는가?

    • max_worker_processes

    dbms_job.broken_job(job_id int primary key, failed_count int, updated_at timestamptz)

    메타(참고 전용)

    • o2scheduler.job(id, username, command_expr, command_type, schedule_expr, schedule_type, schedule_time, created_at, updated_at, deleted_at)

    • o2scheduler.job_run_details(id, job_id, worker_pid, username, status, message, start_time, end_time, schedule_time)

    프로시저: dbms_job.submit/remove/what/run/next_date/interval/change/broken

    PL/SQL 블록 형식 what: e.g., BEGIN my_proc(); END;

  • interval

    • job이 수행될 반복주기를 정의하는 개념입니다.

    • 오라클의 SYSDATE, SYSTIMESTAMP 키워드를 사용할 수 있으며, 해당 키워드 뒤에 붙일 수 있는 +1 같은 오라클 형식의 산수는 PostgreSQL가 이해가능한 PostgreSQL 문법으로 변환합니다.

      • 예) SYSDATE+1 입력 시 → now() + interval ‘1’ day 로 내부에서 변환하여 interval 식으로 사용합니다.

    • 지원되는 오라클 문법 및 PostgreSQL 형식으로 변환되는 키워드는 아래와 같습니다.

      • SYSDATE → now()

      • SYSTIMESTAMP → clock_timestamp()

  • -

    실행할 작업 내용이다;

    실행할 프로시저 이름 또는 PL/SQL 블록 문자열을 입력합니다.

    what 스트링이 공백 기준 1개의 단어로 구성되어 있으면 실행할 프로시져의 이름으로, 2개 이상의 단어로 구성되어있으면 PL/SQL 블록으로 what을 인식합니다.

    next_date

    timestamptz

    CURRENT_TIMESTAMP

    다음 실행 시각입니다;

    NULL입력 시 내부에서 now로 설정합니다.

    interval

    text

    NULL

    반복 주기 표현식입니다.; NULL이면 일회성 작업을 나타냅니다.

    no_parse

    boolean

    false

    구문 검증 지연 여부입니다. (현재 미사용; 오라클 호환을 위해 존재합니다.)

    -

    새로운 실행 내용입니다. NULL이면 기존 값 유지합니다.

    next_date

    timestamptz

    -

    새로운 다음 실행 시각입니다. NULL이면 기존 값 유지합니다.

    interval

    text

    -

    새로운 반복 주기입니다. NULL이면 기존 값 유지합니다.

    instance

    integer

    0

    인스턴스 번호입니다.(현재 미사용입니다.; 오라클 호환을 위해 존재합니다.)

    force

    boolean

    false

    강제 실행 여부입니다.(현재 미사용입니다.; 오라클 호환을 위해 존재합니다.)

    -

    broken 상태 설정 여부입니다.

    next_date

    timestamptz

    current_timestamp

    복구 시 다음 실행 시각입니다.

    가 부족하지 않은가?
  • dbms_job.failure_threshold 값이 환경에 적절한가?

  • o2scheduler.job_run_details에 실패 이력이 기록되는가? 실패 메시지를 확인해 표현식/프로시저 존재 여부 점검

  • broken

    Job의 상태를 broken 또는 not broken 으로 설정합니다.

    change

    Job의 정보를 수정합니다.

    interval

    Job의 interval(job이 실행되는 반복 주기 )를 수정합니다.

    next_date

    Job의 다음 수행시간을 설정합니다.

    remove

    Job을 제거합니다.

    run

    Job의 broken 상태 상관없이 강제로 지금 실행시킵니다.

    submit

    Job을 신규 생성합니다.

    what

    Job의 what(job이 수행해야하는 작업 정의)를 수정합니다.

    CREATE EXTENSION dbms_job;
    # 또는 CREATE EXTENSION dbms_job CASCADE; 를 통해 o2scheduler를 동시에 같이 설치합니다.
    
    CALL dbms_job.submit(
      OUT job integer,
      IN what text,
      IN next_date timestamptz DEFAULT CURRENT_TIMESTAMP,
      IN "interval" text DEFAULT NULL,
      IN no_parse boolean DEFAULT false
    )

    job

    integer

    -

    OUT 파라미터이다.

    생성된 작업의 고유 ID를 반환합니다.

    what

    -- 1회 실행(즉시); my_proc 이라는 이름의 프로시져를 지금 당장 실행하는 job을 등록한다.
    CALL dbms_job.submit(NULL, 'my_proc');
    
    -- 1시간 주기 반복; my_proc 이라는 이름의 프로시져를 1시간 주기로 반복 실행하는 job을 등록 및 바로 실행한다.
    CALL dbms_job.submit(NULL, 'my_proc', "interval" => 'SYSDATE+1/24');
    
    -- 1분 후 첫 실행하고, 이후 매분 반복하는 PL/SQL job을 등록한다.
    CALL dbms_job.submit(NULL, 'BEGIN my_proc(); END;',
                         next_date => now() + interval '1 minute',
                         "interval" => 'now() + interval ''1'' minute');
    CALL dbms_job.remove(IN job integer)

    job

    integer

    삭제할 작업의 ID입니다.

    -- 작업 ID 123 삭제
    CALL dbms_job.remove(123);
    CALL dbms_job.what(IN job integer, IN what text)

    job

    integer

    변경할 작업의 ID입니다.

    what

    text

    새로운 실행 내용입니다. NULL 또는 빈 문자열은 쓸 수 없습니다.

    -- 작업 ID 123의 실행 내용을 다른 프로시저로 변경
    CALL dbms_job.what(123, 'my_other_proc');
    
    -- PL/SQL 블록으로 변경
    CALL dbms_job.what(123, 'BEGIN my_proc(); my_other_proc(); END;');
    
    CALL dbms_job.run(IN job integer)

    job

    integer

    실행할 작업의 ID입니다.

    -- 작업 ID 123 즉시 실행
    CALL dbms_job.run(123);
    
    CALL dbms_job.next_date(IN job integer, IN next_date timestamptz)

    job

    integer

    변경할 작업의 ID입니다.

    next_date

    timestamptz

    새로운 다음 실행 시각입니다. NULL이면 스케줄링 비활성화합니다.

    -- 작업 ID 123을 1시간 후에 실행하도록 변경
    CALL dbms_job.next_date(123, now() + interval '1 hour');
    
    -- 작업 ID 123의 스케줄링 비활성화
    CALL dbms_job.next_date(123, NULL);
    
    CALL dbms_job.interval(IN job integer, IN "interval" text)

    job

    integer

    변경할 작업의 ID입니다.

    interval

    text

    새로운 반복 주기 표현식입니다.

    NULL이면 일회성 작업으로 변경합니다.

    -- 작업 ID 123을 매일 실행하도록 변경
    CALL dbms_job.interval(123, 'SYSDATE+1');
    
    -- 작업 ID 123을 일회성 작업으로 변경
    CALL dbms_job.interval(123, NULL);
    
    CALL dbms_job.change(
      IN job integer,
      IN what text,
      IN next_date timestamptz,
      IN "interval" text,
      IN instance integer DEFAULT 0,
      IN "force" boolean DEFAULT false
    )

    job

    integer

    -

    변경할 작업의 ID입니다

    what

    -- 작업 ID 123의 실행 내용과 주기를 모두 변경
    CALL dbms_job.change(123, 'new_proc', now() + interval '2 hours', 'SYSDATE+1/12');
    
    -- 작업 ID 123의 실행 시각만 변경
    CALL dbms_job.change(123, NULL, now() + interval '30 minutes', NULL);
    
    CALL dbms_job.broken(
      IN job integer,
      IN broken boolean,
      IN next_date timestamptz DEFAULT current_timestamp
    )

    job

    integer

    -

    변경할 작업의 ID입니다.

    broken

    -- 작업 ID 123을 깨진 상태로 설정
    CALL dbms_job.broken(123, true);
    
    -- 작업 ID 123을 복구하고 1시간 후에 실행하도록 설정
    CALL dbms_job.broken(123, false, now() + interval '1 hour');
    # postgresql.conf
    # ...
    dbms_job.failure_threshold = 10
    -- 최근 실행 이력
    SELECT * FROM o2scheduler.job_run_details ORDER BY id DESC LIMIT 20;
    
    -- 등록된 잡
    SELECT * FROM o2scheduler.job ORDER BY id DESC LIMIT 20;

    활성화

    o2scheduler

    dbms_job

    요약

    Job 실행 이력 및 정보

    Broken

    SUBMIT

    개요

    프로토타입

    파라미터

    예제

    REMOVE

    개요

    프로토타입

    파라미터

    예제

    WHAT

    개요

    프로토타입

    파라미터

    예제

    RUN

    개요

    프로토타입

    파라미터

    예제

    NEXT_DATE

    개요

    프로토타입

    파라미터

    예제

    INTERVAL

    개요

    프로토타입

    파라미터

    예제

    CHANGE

    개요

    프로토타입

    파라미터

    예제

    BROKEN

    개요

    프로토타입

    파라미터

    예제

    What 구분 규칙

    구성 파라미터(GUC)

    운영 가이드

    상태/이력 확인

    권장 설정

    트랜잭션 유의사항

    트러블슈팅 체크리스트

    부록: 스키마 개요

    text

    text

    boolean

    DBMS_SQL

    개요

    DBMS_SQL은 PL/pgSQL로 데이터 조작어(DML: Data Manipulation Language, 이하 DML), 데이터 정의어(DDL: Data Definition Language) 등 Dynamic SQL 문장을 사용하기 위한 패키지입니다.

    Dynamic SQL 문장은 PL/pgSQL의 소스 안에 SQL 문장을 직접 사용하지 않고 나중에 PL/pgSQL 구문을 실행할 때, 문자열로 전달하여 파싱되는 SQL 문장을 말합니다. 따라서 PL/pgSQL 프로시저/함수를 생성할 때 존재하지 않았던 테이블에 대해 SELECT를 실행할 수도 있고, CREATE TABLE, DROP TABLE 등의 DDL 문장도 수행할 수 있습니다.

    DBMS_SQL 패키지로 Dynamic SQL 문장을 실행하는 과정은 다음과 같습니다.

    1. OPEN_CURSOR 함수를 이용하여 커서를 열고, 커서 ID를 얻습니다.

    2. 커서를 구분하기 위해 앞에서 얻은 커서 ID를 다른 함수의 파라미터로 전달합니다.

    3. Dynamic SQL 문장을 파싱하기 위해 PARSE 함수를 호출합니다. 만약 실행할 Dynamic SQL 문장 안에 바인드해야 할 변수가 있는 경우 BIND_VARIABLE 함수를 호출해 변수를 바인드합니다.

    4. 실행 결과를 가져오기 전에 결과 컬럼의 타입을 정의하기 위해 DEFINE_COLUMN 함수를 호출합니다.

    5. EXECUTE 함수를 이용하여 파싱된 SQL 문장을 실행합니다.

    6. 실행한 결과를 fetch하기 위해 FETCH_ROWS 함수를 실행합니다. fetch한 결과를 원하는 변수로 가져오기 위해서는 COLUMN_VALUE 함수를 호출합니다.

    7. 모든 수행을 끝낸 후 커서를 종료하기 위해 CLOSE_CURSOR 함수를 실행합니다.

    함수 / 프로시저
    반환 타입
    설명

    설치는 super user에 이루어져야 하고 public으로 공개되어 있습니다.


    프로시저/함수나 anonymous block 내에서 DBMS_SQL 패키지를 이용하여 DML문 수행과 COMMIT/ROLLBACK을 같이 사용할 경우 EXCEPTION절을 사용하면 postgreSQL 특징에 의하여 오류가 발생한다. 따라서 COMMIT/ROLLBACK을 동일 프로시저/함수나 anonymous block 내에 삽입하고 싶을 경우 EXCEPTION절을 사용하지 않도록 합니다.


    본 절에서는 DBMS_SQL 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명합니다.

    주어진 커서의 SQL 문장에서 콜론(:)으로 시작하는 변수에 값들의 집합을 설정해주는 프로시저입니다. 변수의 값이 모두 설정되지 않은 상태로 EXECUTE 함수를 호출하면 예외가 발생합니다. 변수는 이름으로 찾을 수 있으므로, SQL 문장 내의 변수이름과 파라미터로 주어진 이름을 동일하게 호출해야 합니다.

    BIND_ARRAY 프로시저는 테이블에 동시에 여러 로우를 삽입, 삭제, 변경하는 용도로 활용됩니다.

    파라미터
    설명

    주어진 커서의 SQL 문장에서 콜론(:)으로 시작하는 변수에 값을 설정해주는 프로시저입니다. 변수의 값이 모두 설정되지 않은 상태로 EXECUTE 함수를 호출하면 예외가 발생합니다. 변수는 이름으로 찾을 수 있으므로, SQL 문장 내의 변수이름과 파라미터로 주어진 이름을 동일하게 호출해야 합니다.

    파라미터
    설명

    주어진 커서를 닫고, NULL로 설정하는 프로시저입니다.

    파라미터
    설명

    주어진 커서에서 fetch한 컬럼의 값을 원하는 변수로 가져오는 프로시저입니다. 실제 fetch는 FETCH_ROWS 함수에서 일어나고, COLUMN_VALUE 프로시저는 fetch한 후 데이터를 가져오는 데 사용됩니다.

    파라미터
    설명

    주어진 커서에서 fetch될 컬럼의 타입을 정의하는 프로시저입니다. 이 프로시저는 SELECT 문장에만 사용할 수 있습니다.

    파라미터
    설명

    주어진 커서에서 fetch될 컬럼 집합의 타입을 정의하는 프로시저입니다. 이 프로시저는 SELECT 문장에만 사용할 수 있습니다.

    DEFINE_ARRAY 프로시저는 한 번의 FETCH로 여러 로우를 가져올 경우 사용합니다.

    파라미터
    설명

    주어진 커서를 실행하는 함수이다. INSERT, UPDATE, DELETE 문장인 경우 처리된 로우의 수가 반환됩니다.

    파라미터
    설명

    주어진 커서에 EXECUTE 와 FETCH_ROWS 함수를 연속해서 호출하는 것과 동일한 함수입니다. 반환되는 값은 FETCH_ROWS와 동일합니다. 즉, 실제 fetch한 로우의 수를 반환합니다.

    파라미터
    설명

    주어진 커서에서 로우를 fetch하는 함수입니다. 이때 실제 fetch된 로우의 수가 반환됩니다. 더 이상 fetch할 로우가 없는데 이 함수를 계속 호출하게 되면 예외가 발생합니다.

    파라미터
    설명

    주어진 커서가 DBMS_SQL.open_cursor 함수로 열릴 수 있는 커서인지 검사하는 함수입니다.

    파라미터
    설명

    현재 수행 중인 문장의 fetch된 로우 수의 총합을 반환하는 함수입니다.

    SQL 문장을 수행하기 위한 커서를 새로 하나 여는 함수입니다. 열린 커서는 사용 후에 반드시 close_cursor를 호출해야 리소스가 서버에 반납됩니다.

    한번 열린 커서는 동일한 SQL 문장을 반복해서 수행할 수도 있고, 다른 SQL 문장을 실행하는 데 사용할 수도 있습니다. 커서를 여는 데 성공하면, 커서 ID를 INTEGER 타입으로 반환합니다. 이 값을 이후에 DBMS_SQL 패키지의 커서 파라미터로 사용하면 됩니다.

    주어진 SQL 문장을 파싱하는 프로시저입니다. 기존에 열려 있는 SQL 문장이 있다면 닫고 새로 입력된 SQL 문장을 파싱합니다.

    파라미터
    설명

    스케쥴러(Scheduler) 참조 안내서

    DBMS_JOB, DBMS_SCHEDULER 패키지 사용을 위한 필수 프레임워크 o2 scheduler에 대한 스케쥴러(scheduler) 참조서입니다.

    • o2scheduler는 dbms_job, dbms_scheduler가 내부에서 사용하는 job/schedule 프레임워크입니다.

    • dbms_job 및 dbms_scheduler 패키지 사용 전, 반드시 o2scheduler 설치 및 활성화 되어 있어야 합니다.

    • o2scheduler 설치 후 생성되는 테이블, 트리거 등 관련 객체는 직접 사용하지 않도록 합니다.

    DBMS_SCHEDULER

    DBMS_SCHEDULER은 오라클 호환 잡 스케줄링 패키지로, Job, Program, Schedule를 생성하고 관리하는 방법을 제공합니다.

    내부적으로 o2scheduler 프레임워크를 사용하므로, 사용 전 o2scheduler의 사전 설정과 활성화가 요구됩니다.

    DBMS_SCHEDULER에서 필요로 하는 추가 객체들은 dbms_scheduler 스키마 내부에 생성되며, 메타 데이터와 실행 이력은 o2scheduler 스키마의 메타 테이블을 사용합니다.

    Name
    Return Type
    Description

    에러 코드

    O2 Extension은 PostgreSQL의 빌트인 에러코드와 O2 Extension의 커스텀 에러 코드를 발생시킵니다. PostgreSQL 빌트인 에러코드에 대한 자세한 내용은 매뉴얼을 참조합니다.

    PostgreSQL의 에러코드는 5개의 문자로 구성됩니다. O2 Extension의 커스텀 에러 코드는 상위 2개 문자가 'O2'로 고정이고, 세 번째 문자는 에러 코드의 카테고리를 정의합니다.


    에러 코드
    로그 레벨
    설명
  • +1 → + interval ‘1 day’

  • +1/24 → + interval ‘1 hour’

  • +1/1440 → + interval ‘1 minute’

  • +1/86400 → + interval ‘1 second’

  • CLOSE_CURSOR

    n/a

    주어진 커서를 닫는 프로시저입니다.

    COLUMN_VALUE

    n/a

    Fetch한 컬럼의 값을 가져오는 프로시저입니다.

    DEFINE_COLUMN

    n/a

    Fetch될 컬럼의 타입을 정의하는 프로시저입니다.

    DEFINE_ARRAY

    n/a

    Fetch될 컬럼 집합의 타입을 정의하는 프로시저입니다.

    EXECUTE

    BIGINT

    주어진 커서를 실행하는 함수입니다.

    EXECUTE_AND_FETCH

    INTEGER

    주어진 커서에 대하여 EXECUTE와 FETCH_ROWS를 수행하는 함수입니다.

    FETCH_ROWS

    INTEGER

    주어진 커서 쿼리의 결과 row를 fetch하는 함수입니다.

    IS_OPEN

    BOOL

    열려 있는 커서인지 여부를 체크하는 함수입니다.

    LAST_ROW_COUNT

    INTEGER

    현재 수행중인 문장의 fetch된 row 수의 총합을 구하는 함수입니다.

    OPEN_CURSOR

    INTEGER

    커서를 새로이 열고 매칭된 커서 번호를 리턴하는 함수입니다.

    PARSE

    n/a

    주어진 SQL 문장을 파싱하는 프로시저입니다.

    index1

    이 파라미터를 사용할 경우 집합 변수 내 바인딩할 영역의 시작점을 지정합니다. ( ≥ 1)

    index2

    이 파라미터를 사용할 경우 집합 변수 내 바인딩할 영역의 끝점을 지정합니다. ( ≥ index1)

    column_size

    SELECT를 실행할 컬럼 값의 최대 길이입니다. 단, 최대 길이를 초과한 결과 컬럼은 절삭하여 가져옵니다.

    cnt

    한번에 FETCH되어야 하는 row의 갯수입니다.

    lower_bnd

    이 파라미터를 사용할 경우 FETCH되어 저장될 집합변수의 시작점을 지정합니다. ( ≥ 1)

    BIND_VARIABLE

    n/a

    주어진 커서의 SQL 문장에서 콜론(:)으로 시작하는 변수에 값을 바인딩 해주는 프로시저입니다.

    BIND_ARRAY

    n/a

    주어진 커서의 SQL 문장에서 콜론(:)으로 시작하는 변수에 값들의 집합을 바인딩 해주는 프로시저입니다.

    c

    대상 커서입니다.

    name

    SQL 문장 내의 변수의 이름입니다. 이름에서 첫 문자 콜론(:)은 생략해도 됩니다.

    value

    SQL 문장 내의 변수에 설정할 값들의 집합 변수입니다.

    c

    대상 커서입니다.

    name

    SQL 문장 내의 변수의 이름입니다. 이름에서 첫 문자 콜론(:)은 생략해도 됩니다.

    value

    SQL 문장 내의 변수에 설정할 값입다.

    c

    대상 커서입니다.

    c

    대상 커서입니다.

    pos

    fetch할 컬럼 목록에서 상대적 위치입니다. (1 이상)

    value

    가져올 컬럼을 저장할 변수입니다.

    c

    대상 커서입니다.

    col

    SELECT를 실행할 컬럼 목록에서의 상대적 위치입니다. 문장의 컬럼에서 첫 번째 위치를 1로 하며, 1 이상의 값을 입력합니다.

    value

    정의할 컬럼의 변수로, 타입만 참조하며 값은 관계없습니다.

    c

    대상 커서입니다.

    col

    SELECT를 실행할 컬럼 목록에서의 상대적 위치입니다. 문장의 컬럼에서 첫 번째 위치를 1로 하며, 1 이상의 값을 입력합니다.

    value

    정의할 컬럼의 집합 변수로, 타입만 참조하며 값은 관계없습니다.

    c

    대상 커서입니다.

    c

    대상 커서입니다.

    exact

    • TRUE : 정확히 하나의 로우가 fetch되지 않으면 예외가 발생합니다.

    • FALSE : 여러 개의 ROW가 fetch되어도 예외가 발생하지 않습니다.

    c

    대상 커서입니다.

    c

    대상 커서입니다.

    c

    대상 커서입니다.

    stmt

    파싱할 대상이 되는 SQL 문장입니다.

    권한

    유의사항

    구성

    BIND_ARRAY

    프로토타입

    파라미터

    예제

    BIND_VARIABLE

    프로토타입

    파라미터

    예제

    CLOSE_CURSOR

    프로토타입

    파라미터

    예제

    COLUMN_VALUE

    프로토타입

    파라미터

    예제

    DEFINE_COLUMN

    프로토타입

    파라미터

    예제

    DEFINE_ARRAY

    프로토타입

    파라미터

    예제

    EXECUTE

    프로토타입

    파라미터

    예제

    EXECUTE_AND_FETCH

    프로토타입

    파라미터

    예제

    FETCH_ROWS

    프로토타입

    파라미터

    예제

    IS_OPEN

    프로토타입

    파라미터

    예제

    LAST_ROW_COUNT

    프로토타입

    예제

    OPEN_CURSOR

    프로토타입

    예제

    PARSE

    프로토타입

    파라미터

    예제

    create table src(id numeric, name text, birthdate date);                         
    create table dest as select * from src;                                          
                                                                                     
    insert into src select i, 'x', current_date from generate_series(1,1000) g(i);   
                                                                                     
    create or replace procedure copy (source in text, dest in text)                  
    as $$                                                                            
    declare                                                                          
      id_var numeric;                                                                
      name_var text;                                                                 
      birthdate_var date;                                                            
      source_cursor integer;                                                         
      destination_cursor integer;                                                    
      ignore integer;                                                                
    begin                                                                            
      source_cursor := dbms_sql.open_cursor();                                       
      call dbms_sql.parse(source_cursor,                                             
        'select id, name, birthdate from ' || source);                                                                
                                                                                     
      call dbms_sql.define_column(source_cursor, 1, id_var);                         
      call dbms_sql.define_column(source_cursor, 2, name_var, 30);                   
      call dbms_sql.define_column(source_cursor, 3, birthdate_var);                  
                                                                                       
      perform dbms_sql.execute(source_cursor);                                       
                                                                                     
      destination_cursor := dbms_sql.open_cursor();                                  
      call dbms_sql.parse(destination_cursor,                                        
        'insert into ' || dest || ' values (:id_bind, :name_bind, :birthdate_bind)');
                                                                                                         
      loop                                                                           
        if dbms_sql.fetch_rows(source_cursor) > 0 then                               
          call dbms_sql.column_value(source_cursor, 1, id_var);                      
          call dbms_sql.column_value(source_cursor, 2, name_var);                    
          call dbms_sql.column_value(source_cursor, 3, birthdate_var);               
                                                                                     
          call dbms_sql.bind_variable(destination_cursor, ':id_bind', id_var);       
          call dbms_sql.bind_variable(destination_cursor, ':name_bind', name_var);   
          call dbms_sql.bind_variable(destination_cursor, ':birthdate_bind', birthdate_var);
                                                                                     
          ignore := dbms_sql.execute(destination_cursor);                            
        else                                                                         
          exit;                                                                      
        end if;                                                                      
      end loop;                                                                      
         
      -- Exception절 있을 경우 
      -- ERROR:  cannot commit while a subtransaction is active 발생                                                                                                                                                      
      commit; 
                                                                                     
      call dbms_sql.close_cursor(source_cursor);                                     
      call dbms_sql.close_cursor(destination_cursor);                                
    
    -- 사용하지 말 것                                                                                  
    /*exception                                                                       
      when others then                                                               
        raise notice 'exception';                                                    
                                                                                     
        if dbms_sql.is_open(source_cursor) then                                      
          call dbms_sql.close_cursor(source_cursor);                                 
        end if;                                                                      
                                                                                     
        if dbms_sql.is_open(destination_cursor) then                                 
          call dbms_sql.close_cursor(destination_cursor);                            
        end if;                                                                      
        raise;                                                                      
    */
    end;                                                                             
    $$ language plpgsql; 
    BIND_ARRAY(c INTEGER, name TEXT, value ANYARRAY) 
    
    BIND_ARRAY(c INTEGER, name TEXT, value ANYARRAY, index1 INTEGER, index2 INTEGER) 
    DO
    $$
    DECLARE
        c int;
        a varchar[];
        b int[];    
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'insert into foo values(:a, :b)');
            
        a := ARRAY['ahoj1', 'ahoj2', 'ahoj3', 'ahoj4', 'ahoj5'];
        b := ARRAY[1, 2, 3, 4, 5];
            
        CALL dbms_sql.bind_array(c, 'a', a, 2, 3);
        CALL dbms_sql.bind_array(c, 'b', b, 3, 4);
    END;
    $$;
    BIND_VARIABLE(c INTEGER, name TEXT, value "any") 
    DO
    $$
    DECLARE
        c int;
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'insert into test values(:a)');
        CALL dbms_sql.bind_variable(c, 'a', 'ahoj');
    END;
    $$;
    CLOSE_CURSOR(c INTEGER)
    DO
    $$
    DECLARE
        c int;
    BEGIN
        c := dbms_sql.open_cursor();
        call dbms_sql.close_cursor();
    END;
    $$;
    DEFINE_COLUMN(c INTEGER, pos INTEGER, INOUT value anyelement) 
    DO
    $$
    DECLARE
        c int;
        strval varchar;
        intval int;
        stack text := '';
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'select ''ahoj'' || i, i from generate_series(1, 5) g(i)');
        CALL dbms_sql.define_column(c, 1, strval);
        CALL dbms_sql.define_column(c, 2, intval);
        PERFORM dbms_sql.execute(c);
            
        WHILE dbms_sql.fetch_rows(c) > 0
        LOOP
            CALL dbms_sql.column_value(c, 1, strval);
            CALL dbms_sql.column_value(c, 2, intval);
        END LOOP;
    
        CALL dbms_sql.close_cursor(c);
    END;
    $$;
    DEFINE_COLUMN(c INTEGER, col INTEGER, value "any", column_size INTEGER) 
    DO
    $$
    DECLARE
        c int;
        strval varchar;
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'select ''test'', i from generate_series(1, 5) g(i)');
        CALL dbms_sql.define_column(c, 1, strval);
    END;
    $$;
    DEFINE_ARRAY(c INTEGER, col INTEGER, value "anyarray", cnt INTEGER, lower_bnd INTEGER) 
    DO
    $$
    DECLARE
        c int;
        strval varchar[];
        intval int[];
        stack text := '';
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'select ''ahoj'' || i, i from generate_series(1, 5) g(i)');
        CALL dbms_sql.define_array(c, 1, strval, 5, 1);
        CALL dbms_sql.define_array(c, 2, intval, 5, 1);
    END;
    $$;
    EXECUTE(c IN INTEGER)
    RETURNS BIGINT
    DO
    $$
    DECLARE
        c int;
        a varchar[];
        b int[];
        result int;
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'insert into foo values(:a, :b)');
          
        a := ARRAY['ahoj1', 'ahoj2', 'ahoj3', 'ahoj4', 'ahoj5'];
        b := ARRAY[1, 2, 3, 4, 5];
           
        CALL dbms_sql.bind_array(c, 'a', a, 2, 3);
        CALL dbms_sql.bind_array(c, 'b', b, 3, 4);
            
        result := dbms_sql.execute(c);
    
        CALL dbms_sql.close_cursor(c);
    END;
    $$;
    EXECUTE_AND_FETCH(c IN INTEGER, exact IN BOOL)
    RETURNS INT
    DO
    $$
    DECLARE
        c int;
        strval varchar;
        intval int;
        stack text := '';
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'select ''ahoj'' || i, i from generate_series(1, 5) g(i)');
        CALL dbms_sql.define_column(c, 1, strval);
        CALL dbms_sql.define_column(c, 2, intval);
        PERFORM dbms_sql.execute_and_fetch(c, false);
            
        WHILE dbms_sql.fetch_rows(c) > 0
        LOOP
            CALL dbms_sql.column_value(c, 1, strval);
            CALL dbms_sql.column_value(c, 2, intval);
        END LOOP;
    
        CALL dbms_sql.close_cursor(c);
    END;
    $$;
    FETCH_ROWS(c IN INTEGER)
    RETURNS INTEGER
    DO
    $$
    DECLARE
        c int;
        strval varchar;
        intval int;
        stack text := '';
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'select ''ahoj'' || i, i from generate_series(1, 5) g(i)');
        CALL dbms_sql.define_column(c, 1, strval);
        CALL dbms_sql.define_column(c, 2, intval);
        PERFORM dbms_sql.execute(c);
            
        WHILE dbms_sql.fetch_rows(c) > 0
        LOOP
            CALL dbms_sql.column_value(c, 1, strval);
            CALL dbms_sql.column_value(c, 2, intval);
        END LOOP;
    
        CALL dbms_sql.close_cursor(c);
    END;
    $$;
    IS_OPEN(c IN INTEGER)
    RETURNS BOOL
    DO
    $$
    DECLARE
        c int;
        x bool;
    BEGIN
        c := dbms_sql.open_cursor();
        x := dbms_sql.is_open(c);
    END;
    $$;
    LAST_ROW_COUNT()
    RETURNS INT
    DO
    $$
    DECLARE
        c int;
        strval varchar;
        intval int;
        n int;
    BEGIN
        c := dbms_sql.open_cursor();
        CALL dbms_sql.parse(c, 'select ''ahoj'' || i, i from generate_series(1, 5) g(i)');
        CALL dbms_sql.define_column(c, 1, strval);
        CALL dbms_sql.define_column(c, 2, intval);
        PERFORM dbms_sql.execute(c);
            
        WHILE dbms_sql.fetch_rows(c) > 0
        LOOP
            CALL dbms_sql.column_value(c, 1, strval);
            CALL dbms_sql.column_value(c, 2, intval);
    
            n := dbms_sql.last_row_count();
        END LOOP;
    
        CALL dbms_sql.close_cursor(c);
    END;
    $$;
    OPEN_CURSOR()
    RETURNS INTEGER
    DO
    $$
    DECLARE
        c int;
    BEGIN
        c := dbms_sql.open_cursor();
    END;
    $$;
    PARSE(c INTEGER, stmt TEXT)
    DO
    $$
    DECLARE
        c int;
    BEGIN
        c := dbms_sql.open_cursor();
        call dbms_sql.parse(c, 'insert into test values(''test1'',1)');
    END;
    $$;

    모든 o2scheduler 관련 객체들은 o2scheduler 라는 스키마를 사용하며 해당 스키마 내부에 만들어집니다.

    o2scheduler는 다른 o2 extension처럼 설치 후, 활성화 하기 전에 추가적으로 postgresql.conf 파일을 수정합니다. 또한, 해당 작업 후에는 반드시 postgresql 서버를 재기동하여 수정한 값을 적용시켜줘야 합니다.

    postgresql.conf 파일 내용 중 shared_preload_libraries 항목의 값으로써 o2scheduler 를 추가하여, postgresql 기동될때 o2scheduler 구성파일이 같이 로드될 수 있도록 설정해줘야 합니다.

    아래와 같이 postgresql.conf 파일을 수정합니다.

    shared_preload_libraries는 사용자 환경에 따라 다른 extension들이 이미 추가되어 있을 수도 있습니다.

    그러한 경우에는 , 를 활용하여 o2scheduler를 덧붙여줍니다.

    postgresql.conf 파일 내용 중 max_worker_processes 항목의 값 수치를 적절하게 증가시켜서, job 기능이 원활하게 수행될 수 있도록 합니다.

    o2scheduler는 PostgreSQL가 관리하는 Background 프로세스 기능을 적극적으로 활용합니다.

    o2scheduler를 사용하는 데이터베이스 및 job의 갯수가 많아질수록 더욱 많은 Background 프로세스를 생성하게 됩니다.

    따라서, job을 많이 등록하고 활용해야하는 환경을 고려한다면, postgresql.conf 파일을 수정하여 max_worker_processes 수치를 적절하게 조정해줘야 합니다.

    아래와 같이 postgresql.conf 파일을 수정합니다.

    • 이 값은 동시 다발적으로 실행될 수 있는 최대 백그라운드 작업의 총 개수를 의미합니다.

    • 수치가 클수록 더 많은 컴퓨터 리소스를 소모하지만, 더 많은 작업을 동시에 처리할 수 있습니다.

    • 기본값인 8은 간단한 환경에서 충분할 수 있으나, 동시에 많은 job을 스케줄링 및 실행해야 하는 경우 부족할 수 있고 job 수행에 차질이 생길 수도 있습니다.

    • CPU 코어 수 이상으로 설정하는 것을 권장하며, CPU 코어 수 + 약간의 여유를 시작점으로서 조정 후 워크로드에 따라 모니터링 후 조정하는 것을 권장합니다.

    • 예를 들어, 8코어 서버에서 스케줄러가 동시에 최소 10개의 작업을 처리되는 것을 보장하고 싶다면, 8 (코어 개수) + 10 (스케줄러) + 2 (여유분) = 20 과 같이 설정하는 것을 고려해볼 수 있습니다.

    • 정확한 값은 시스템 환경과 워크로드 및 리소스 상태를 모니터링하며 조정하는 것이 필요합니다.

    postgresql에 접속하여 다음 명령어로 o2scheduler extension을 활성화를 합니다.

    단, o2scheduler는 create extension을 수행한 데이터베이스에 대해서만 job 기능을 수행할 수 있습니다.

    예를 들어, job 기능을 필요로 하는 데이터베이스가 A, B 두개가 있다면, 각각 두개의 데이터베이스로 따로 접속하여 개별로 create extension 명령어로 o2scheduler를 활성화 해주어야 합니다.

    \dx 명령어를 활용하면 현재 접속한 데이터베이스의 o2scheduler 적용 여부를 확인할 수 있습니다.

    O2SCHEDULER를 설치하면, o2scheduler 라는 스키마가 생성되고 해당 스키마 내부에 실질적으로 JOB 데이터를 저장 및 관리하기 위한 메타 테이블을 생성합니다.

    해당 테이블들에 직접 값을 수정 하거나 추가/삭제하는 행위는 권장하지 않으며, DBMS_JOB/DBMS_SCHEDULER 패키지를 통해 해당 테이블들에 값이 추가/변경되는 것을 확인 및 참고하는 용도로만 메타 테이블을 활용하도록 합니다.

    JOB의 정보를 관리하는 메타 테이블입니다.

    DBMS_JOB/DBMS_SCHEDULER 패키지에서 생성되는 JOB들이 해당 테이블에 저장되며, 각 패키지의 성격에 따라 JOB에 대해 추가적인 메타 정보 관리가 필요한 경우에는 각각 패키지가 추가로 정의한 별도 테이블에 관리됩니다.

    즉, 해당 테이블은 DBMS_JOB/DBMS_SCHEDULER가 공통적으로 사용하는 JOB의 최소한의 필수 메타 정보만 관리합니다.

    Column
    Type
    Nullable
    Default Value
    Description

    ID

    INTEGER

    X (PK)

    integer sequence

    JOB의 식별번호이다.; 생성 시 1씩 증가합니다.

    JOB들의 수행 이력을 기록하는 히스토리 테이블입니다.

    DBMS_JOB/DBMS_SCHEDULER 패키지에서 생성된 JOB들이 수행되었을때 JOB의 성공/실패가 기록됩니다.

    Column
    Type
    Nullable
    Default value
    Description

    ID

    INTEGER

    X (PK)

    integer sequence

    JOB 수행의 식별번호이다; 생성 시 1씩 증가합니다.

    JOB이 실패한 횟수와 실패한 시간을 담은 테이블입니다.

    Column
    Type
    Nullable
    Default value
    Description

    JOB_ID

    INTEGER

    X

    job의 id입니다.

    DBMS_SCHEDULER를 통해 생성한 JOB의 정보를 담는 메타테이블입니다.

    Column
    Type
    Nullable
    Default value
    Description

    JOB_ID

    INTEGER

    X

    JOB의 ID입니다.

    JOB이 수행할 동작이 PROCEDURE일 때, PROCEDURE의 인자로 들어갈 기본 값으로 사용됩니다.

    Column
    Type
    Nullable
    Default value
    Description

    JOB_ID

    INTEGER

    X

    JOB의 ID입니다.

    JOB이 수행할 동작인 PROGRAM이 저장되는 메타테이블입니다.

    Column
    Type
    Nullable
    Default value
    Description

    ID

    INTEGER

    X

    PROGRAM의 ID입니다.

    JOB_ARGUMENT에 정의했던 PROCEDURE의 인자값이 PROCEDURE의 인자로 덮어 씌워질 값에 대한 메타테이블입니다.

    Column
    Type
    Nullable
    Default value
    Description

    PROGRAM_ID

    INTEGER

    X

    PROGRAM의 ID입니다.

    Column
    Type
    Nullable
    Default value
    Description

    ID

    INTEGER

    X

    SCHEDULE의 ID입니다.

    Token type
    Syntax
    Description

    FREQ

    FREQ=predefined_interval

    반복 주기입니다. 사용 가능한 값은 다음과 같습니다; YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY

    BYMONTH

    BYMONTH=month(,month ...)

    월의 3글자 약어입니다.; JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC

    개요

    postgresql.conf 파일 내부 내용 중
    
    ...
    
    #shared_preload_libraries = ''  # (change requires restart)  <= 이 라인을 아래와 같이 수정합니다.
    shared_preload_libraries = 'o2scheduler'
    (이때, 라인의 맨 앞 '#' 문자도 반드시 제거해줍니다.)
    shared_preload_libraries = 'a,b' <- 이미 a,b extension들이 추가되어있을 경우, 이어서 o2scheduler를 추가합니다.
    => shared_preload_libraries = 'a,b,o2scheduler'
    postgresql.conf 파일 내부 내용 중
    
    ...
    
    #max_worker_processes = 8   # (change requires restart)  <= 이 라인을 아래와 같이 수정합니다.
    max_worker_processes = {원하는 숫자}
    (이때, 라인의 맨 앞 '#' 문자도 반드시 제거해줍니다)
    create extension o2scheduler;
    root=# create extension o2scheduler;
    CREATE EXTENSION
    
    root=# \dx
                                       List of installed extensions
        Name     | Version |   Schema   |                         Description                          
    -------------+---------+------------+--------------------------------------------------------------
     o2scheduler | 1.0     | public     | Provides scheduler functions compatible with Oracle database
     plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
    (2 rows)

    설치 설정

    shared_preload_libraries

    max_worker_processes

    max_worker_processes란?

    설치 설정 후 o2scheduler 활성화

    메타 테이블

    O2SCHEDULER.JOB

    O2SCHEDULER.JOB_RUN_DETAILS

    DBMS_JOB.BROKEN_JOB

    DBMS_SCHEDULER.SCHEDULE_JOB

    DBMS_SCHEDULER.JOB_ARGUMENT

    DBMS_SCHEDULER.PROGRAM

    DBMS_SCHEDULER.PROGRAM_ARGUMENT

    DBMS_SCHEDULER.SCEHDULE

    DBMS_SCHEDULER의 repeating interval에 사용되는 Calendar Syntax

    N/A

    JOB을 생성하고 매개변수를 통해 프로그램 및 스케줄의 세부 정보를 지정하는 프로시저입니다.

    CREATE_JOB(job_name, program_name, schedule_name, job_class, enabled, auto_drop, comments)

    N/A

    이미 생성된 프로시저와 스케줄의 이름으로 작업을 생성하는 프로시저입니다.

    SET_JOB_ARGUMENT_VALUE(job_name, argument_position, argument_value)

    N/A

    위치로 매개 변수의 값을 설정하는 프로시저입니다.

    SET_JOB_ARGUMENT_VALUE(job_name, argument_name, argument_value)

    N/A

    이름으로 매개 변수의 값을 설정하는 프로시저입니다.

    CREATE_SCHEDULE(schedule_name, repeat_interval, start_date, end_date, comments)

    N/A

    스케줄을 생성하는 프로시저입니다.

    CREATE_PROGRAM(program_name, program_type, program_action, nargs, enabled, comments)

    N/A

    프로그램을 생성하는 프로시저입니다.

    DEFINE_PROGRAM_ARGUMENT(program_name, argument_position, argument_type, default_value, argument_name, out_argument)

    N/A

    프로그램 인수의 이름을 정의하는 프로시저입니다.

    DEFINE_PROGRAM_ARGUMENT(program_name, argument_position, argument_type, argument_name, out_argument

    N/A

    프로그램 인수의 이름과 기본 값을 정의하는 프로시저입니다.

    DROP_JOB(job_name, force, defer)

    N/A

    작업을 삭제하는 프로시저입니다.

    DROP_SCHEDULE(schedule_name, force)

    N/A

    스케줄을 삭제하는 프로시저입니다.

    DROP_PROGRAM(program_name, force)

    N/A

    프로그램을 삭제하는 프로시저입니다.

    DROP_PROGRAM_ARGUMENT(program_name, argument_name)

    N/A

    프로그램 인수를 제게하는 프로시저입니다.

    RUN_JOB(job_name, use_current_session)

    N/A

    작업을 즉시 실행하는 프로시저입니다.

    ENABLE(name, commit_semantic)

    N/A

    작업 또는 프로그램을 활성화하는 프로시저입니다.

    DISABLE(name, force, commit_semantic)

    N/A

    작업 또는 프로그램을 비활성화하는 프로시저입니다.

    EVALUATE_CALENDAR_STRING(expr, start_date, return_date_after, result)

    N/A

    calendar_string을 평가하고 다음 시간을 알려주는 프로시저입니다.


    본 절에서는 DBMS_SCHEDULER 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명합니다.

    CREATE_JOB 프로시저는 JOB을 생성하고 매개변수를 통해 프로그램 및 스케줄의 세부 정보를 지정하는 프로시저입니다.

    파라미터
    설명

    job_name

    JOB의 이름입니다.

    job_type

    JOB의 타입입니다. 현재 PLSQL_BLOCK과 STORED_PROCEDURE만 지원합니다.

    job_action

    • JOB_TYPE이 PLSQL_BLOCK인 경우, JOB_ACTION은 JOB이 수행될 때 호출되는 PL/SQL 블럭의 내용입니다.

      • JOB_ACTION은 DO $$ ... $$; 형태여야 합니다.

    • JOB_TYPE이 STORED_PROCEDURE인 경우, JOB_ACTION은 프로시저의 이름입니다.

    CREATE_JOB(job_name, job_type, job_action, number_of_arguments, start_date, repeat_interval, end_date, job_class, enabled, auto_drop, comments) 은 인자가 없는 프로시저에 대해서만 지원합니다.

    따라서 number_of_arguments 파라미터에 0 이외의 값을 부여할 시 에러가 발생합니다.

    CREATE_PROGRAM 프로시저는 DBMS_SCHEDULER의 프로그램을 생성하는 프로시저입니다.

    파라미터
    설명

    program_name

    프로그램의 이름입니다.

    program_type

    프로그램의 타입입니다.

    • PLSQL_BLOCK

    • STORED_PROCEDURE

    program_action

    프로그램의 동작입니다.

    • program_type이 PLSQL_BLOCK인 경우, program_action은 프로그램이 호출될 때 실행될 블럭을 포함합니다.

      • PROGRAM_ACTION은 DO $$ ... $$; 형태여야 합니다.

    • program_type이 STORED_PROCEDURE인 경우, 프로시저의 이름입니다.

    CREATE_SCHEDULE 프로시저는 잡 스케줄을 만드는 프로시저입니다.

    파라미터
    설명

    schedule_name

    스케줄의 이름입니다.

    repeat_interval

    Job을 얼마나 반복할지에 대한 주기입니다. 생략 시 한 번만 수행됩니다.

    start_date

    스케줄이 실행될 수 있는 날짜와 시간입니다.

    NULL일 경우 현재 시간이 들어갑니다.

    DEFINE_PROGRAM_ARGUMENT 프로시저는 프로그램 인자를 정의하는 프로시저입니다.

    파라미터
    설명

    program_name

    프로그램의 이름입니다.

    argument_position

    인수가 프로그램에 전달될 때의 인수 위치입니다.

    argument_type

    인수의 데이터 타입입니다.

    DISABLE 프로시저는 프로그램이나 작업을 비활성화하는 프로시저입니다.

    파라미터
    설명

    name

    프로그램이나 작업의 이름입니다.

    force

    의존성이 걸렸더라도 강제로 disable합니다.

    • 오라클과의 호환성을 위해 존재하며, 현재는 지원하고 있지 않습니다.

    commit_syntax

    프로그램이나 작업을 비활성화하는 동안 발생하는 에러의 처리 방식입니다.

    • STOP_ON_FIRST_ERROR : 에러 발생 시 즉시 종료(현재 이것만 지원합니다)

    DROP_JOB 프로시저는 작업을 삭제하고, 해당 작업에 속한 모든 인수를 삭제하며, 향후 수행될 작업을 삭제하는 프로시저입니다.

    파라미터
    설명

    job_name

    작업의 이름입니다.

    force

    force가 True이면, 실행 중인 작업을 종료하고 작업을 삭제합니다.

    defer

    defer이 True이면, 실행 중인 작업이 종료되고 해당 작업을 삭제합니다.

    • force와 defer는 동시에 true일 수는 없습니다.

    DROP_PROGRAM 프로시저는 프로그램을 삭제하는 프로시입니다.

    파라미터
    설명

    program_name

    프로그램의 이름입니다.

    force

    프로그램을 삭제하기 전에 참조하는 작업의 비활성화 여부입니다.

    DROP_PROGRAM_ARGUMENT는 프로그램 인수를 삭제하는 프로시저입니다.

    파라미터
    설명

    program_name

    프로그램의 이름입니다.

    argument_position

    인수의 위치입니다.

    argument_name

    인수의 이름입니다.

    DROP_SCHEDULE 프로시저는 스케줄을 삭제하는 프로시저입니다.

    파라미터
    설명

    schedule_name

    스케줄의 이름입니다.

    force

    force가 false일 때 참조하는 작업이 있다면 에러를 냅니다.

    force가 true일 경우에는 작업이 비활성화되고 스케줄이 삭제됩니다.

    ENABLE 프로시저는 프로그램이나 작업을 활성화하는 프로시저입니다.

    파라미터
    설명

    name

    프로그램이나 작업의 이름입니다.

    commit_semantics

    프로그램이나 작업을 활성화하는 동안 발생하는 에러의 처리 방식입니다.

    • STOP_ON_FIRST_ERROR : 에러 발생 시 즉시 종료(현재 이것만 지원합니다)

    EVALUATE_CALENDAR_STRING 프로시저는 표현식을 평가하여 작업의 다음 실행 날짜와 시간을 얻는 프로시저입니다.

    파라미터
    설명

    expr

    평가될 달력 표현식입니다.

    start_date

    달력 표현식이 유효해지는 날짜와 시간입니다.

    return_date_after

    스케줄러가 start_date와 달력 문자열에 의해 결정된 모든 가능한 일치 항목 중 어떤 것을 반환할지 결정하는데 도움을 줍니다.

    NULL이 들어올 경우 systimestamp으로 채워집니다.

    RUN_JOB 프로시저는 작업을 즉시 실행하는 프로시저입니다.

    파라미터
    설명

    job_name

    실행할 잡의 이름입니다.

    use_current_session

    호환성을 위해 존재하는 인수입니다. 기본값은 TRUE입니다.

    SET_JOB_ARGUMENT_VALUE 프로시저는 인수에 대한 값을 지정하는 프로시저입니다.

    파라미터
    설명

    job_name

    변경할 인수가 속한 작업의 이름입니다.

    argument_position

    값을 설정할 인수의 위치입니다.

    argument_name

    값을 설정할 인수의 이름입니다.

    CREATE_JOB(job_name, job_type, job_action, number_of_arguments, start_date, repeat_interval, end_date, job_class, enabled, auto_drop, comments) 으로 생성한 JOB에 대해서는 현재 지원하고 있지 않습니다.

    개요

    CREATE_JOB(job_name, job_type, job_action, number_of_arguments, start_date, repeat_interval, end_date, job_class, enabled, auto_drop, comments)

    CREATE_JOB(
                 IN job_name TEXT, 
                 IN job_type TEXT, 
                 IN job_action TEXT, 
                 IN number_of_arguments INTEGER DEFAULT 0, 
                 IN start_date TIMESTAMPTZ DEFAULT NULL, 
                 IN repeat_interval TEXT DEFAULT NULL, 
                 IN end_date TIMESTAMPTZ DEFAULT NULL, 
                 IN job_class TEXT DEFAULT 'DEFAULT_JOB_CLASS', 
                 IN enabled BOOLEAN DEFAULT FALSE, 
                 IN auto_drop BOOLEAN DEFAULT TRUE, 
                 IN comments TEXT DEFAULT NULL
               )
               
    CREATE_JOB(
                  IN job_name TEXT,
                  IN program_name TEXT,
                  IN schedule_name TEXT,
                  IN job_class TEXT DEFAULT 'DEFAULT_JOB_CLASS',
                  IN enabled BOOLEAN DEFAULT FALSE,
                  IN auto_drop BOBOLEAN DEFAULT TRUE,
                  IN comments TEXT DEFAULT NULL
              )
    CALL dbms_scheduler.create_job(job_name => 'job1',
                                   job_type => 'plsql_block',
                                   job_action => 'DO $test$ BEGIN SELECT * FROM nonexistent_table; END; $test$;',
                                   number_of_arguments => 0,
                                   start_date => now(),
                                   repeat_interval => 'FREQ=DAILY',
                                   end_date => now() + interval '10 days',
                                   enabled => true,
                                   auto_drop => true);
                                   
    CALL dbms_scheduler.create_job(job_name => 'job2',
                                   program_name => 'program1',
                                   schedule_name => 'schedule1',
                                   enabled => true,
                                   auto_drop => true);
    CREATE_PROGRAM(
                    IN program_name TEXT,
                    IN program_type TEXT,
                    IN program_action TEXT,
                    IN nargs INTEGER DEFAULT 0,
                    IN enabled IN BOOLEAN DEFAULT FALSE,
                    IN comments In TEXT DEFAULT NULL
                  )
    CALL dbms_scheduler.CREATE_PROGRAM('program1', 'STORED_PROCEDURE', 'procedure1', 0, true, NULL);
    
    CALL dbms_scheduler.CREATE_PROGRAM(
                                       program_name => 'program1',
                                       program_type => 'stored_procedure',
                                       program_action => 'procedure1',
                                       nargs => 0,
                                       enabled => true,
                                       comments => NULL
                                       );                                                 
    CREATE_SCHEDULE(
                      IN schedule_name TEXT,
                      IN repeat_interval TEXT,
                      IN start_date TIMESTAMPTZ DEFAULT NULL,
                      IN end_date TIMESTAMPTZ DEFAULT NULL,
                      IN comments TEXT DEFAULT NULL
                   )
    CALL dbms_scheduler.CREATE_SCHEDULE('schedule1', 'FREQ=DAILY', now(), now()+'10 days'::interval, NULL);
    DEFINE_PROGRAM_ARGUMENT(
                              IN program_name TEXT,
                              IN argument_position INTEGER,
                              IN argument_type TEXT,
                              IN default_value TEXT,
                              IN argument_name TEXT DEFAULT NULL,
                              IN out_argument BOOLEAN DEFAULT FALSE
                           )
                           
    DEFINE_PROGRAM_ARGUMENT(
                              IN program_name TEXT,
                              IN argument_position INTEGER,
                              IN argument_type TEXT,
                              IN argument_name TEXT DEFAULT NULL,
                              IN out_argument BOOLEAN DEFAULT FALSE
                           )
    CALL dbms_scheduler.DEFINE_PROGRAM_ARGUMENT(
                                                  'program_1args', 
                                                  1, 
                                                  'text', 
                                                  'default_value', 
                                                  'arg1', false
                                                );
                                                
    CALL dbms_scheduler.DEFINE_PROGRAM_ARGUMENT(
                                                  'program2',
                                                  2,
                                                  'integer',
                                                  'arg2',
                                                  false
                                                );
    DISABLE(
              IN name TEXT,
              IN force BOOLEAN DEFAULT FALSE,
              IN commit_syntax TEXT DEFAULT 'STOP_ON_FIRST_ERROR'
           )
    CALL dbms_scheduler.DISABLE('program1', false, STOP_ON_FIRST_ERROR');
    DROP_JOB(
              IN job_name TEXT,
              IN force BOOLEAN DEFAULT FALSE,
              IN defer BOOLEAN DEFAULT FALSE,
              IN commit_semantics TEXT DEFAULT 'STOP_ON_FIRST_ERROR'
            )
    CALL dbms_scheduler.DROP_JOB('job1', true, false, 'STOP_ON_FIRST_ERROR');
    DROP_PROGRAM(
                  IN program_name TEXT,
                  IN force BOOLEAN DEFAULT FALSE
                )
    CALL dbms_scheduler.DROP_PROGRAM('drop_program', true);
    DROP_PROGRAM_ARGUMENT(
                            IN program_name TEXT,
                            IN argument_position TEXT
                          )
                          
    DROP_PROGRAM_ARGUMENT(
                            IN program_name TEXT,
                            IN argument_name TEXT
                         )
    CALL dbms_scheduler.DROP_PROGRAM_ARGUMENT('program1', 1);
    
    CALL dbms_scheduler.DROP_PROGRAM_ARGUMENT('program1', 'old');
    DROP_SCHEDULE(
                   IN schedule_name TEXT,
                   IN force BOOLEAN DEFAULT FALSE
                 )
    CALL dbms_scheduler.DROP_SCHEDULE('schedule1', true);
    ENABLE(
            IN name TEXT,
            IN commit_semantics TEXT DEFAULT 'STOP_ON_FIRST_ERROR'
          )
    CALL dbms_scheduler.ENABLE('program1');
    EVALUATE_CALENDAR_STRING(
                              IN expr TEXT,
                              IN start_date TIMESTAMPTZ,
                              IN return_date_after TIMESTAMPTZ,
                              OUT next_run_date TIMESTAMPTZ
                            )
    DO $$
    DECLARE
      result TIMESTAMP WITH TIME ZONE;
    BEGIN
    
      CALL DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING
      (
        'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=17;',
        '15-JUN-2013', NULL, result
      );
    
       CALL DBMS_OUTPUT.PUT_LINE('next_run_date: ' || result);
    END;
    $$;
    
    DO $$
    DECLARE
     result TIMESTAMP WITH TIME ZONE;
    BEGIN
      CALL dbms_scheduler.evaluate_calendar_string(
        expr              => 'FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=29',
        start_date        => TIMESTAMPTZ '2024-01-01 00:00:00+09',
        return_date_after => TIMESTAMPTZ '2024-12-31 23:59:59+09',
        result            => result
      );
      raise notice 'date: %', result;
    END;
    $$;
    RUN_JOB(
              IN job_name TEXT,
              IN use_current_session BOOLEAN DEFAULT TRUE
            )
    DBMS_SCHEDULER.RUN_JOB('job1', TRUE);
    SET_JOB_ARGUMENT_VALUE(
                            IN job_name TEXT,
                            IN argument_position INTEGER,
                            IN argument_value TEXT
                          )
                          
    SET_JOB_ARGUMENT_VALUE(
                            IN job_name TEXT,
                            IN argument_name TEXT,
                            IN argument_value TEXT
                          )
    CALL dbms_scheduler.SET_JOB_ARGUMENT_VALUE('job1', 1, '30');
    
    CALL dbms_scheduler.SET_JOB_ARGUMENT_VALUE('job1', 'arg1', 'SMITH');

    구성

    CREATE_JOB

    프로토타입

    파라미터

    주의사항

    예제

    CREATE_PROGRAM

    프로토타입

    파라미터

    예제

    CREATE_SCHEDULE

    프로토타입

    파라미터

    예제

    DEFINE_PROGRAM_ARGUMENT

    프로토타입

    파라미터

    예제

    DISABLE

    프로토타입

    파라미터

    예제

    DROP_JOB

    프로토타입

    파라미터

    예제

    DROP_PROGRAM

    프로토타입

    파라미터

    예제

    DROP_PROGRAM_ARGUMENT

    프로토타입

    파라미터

    예제

    DROP_SCHEDULE

    프로토타입

    파라미터

    예제

    ENABLE

    프로토타입

    파라미터

    예제

    EVALUATE_CALENDAR_STRING

    프로토타입

    파라미터

    예제

    RUN_JOB

    프로토타입

    파라미터

    예제

    SET_JOB_ARGUMENT_VALUE

    프로토타입

    파라미터

    주의사항

    예제

    공유 메모리 세그먼트를 참조할 수 없습니다.

    공유 메모리 세그먼트를 참조하고 있는 객체를 삭제하거나 인스턴스 재기동이 필요합니다. (DBMS_ALERT, 또는 DBMS_PIPE 안내서 참조)

    O2002

    ERROR

    제공하지 않는 기능입니다.

    O2003

    ERROR

    NULL 값 허용되지 않습니다.

    O2004

    ERROR

    유효하지 않은 파라미터 값이 입력됩니다.

    O2005

    ERROR

    출력할 데이터가 없습니다.

    O2006

    ERROR

    해당 인코딩으로 변환할 수 없습니다.

    O2007

    ERROR

    현재 확장이 shared_preload_libraries에 설정되어 있지 않습니다.

    에러 코드
    로그 레벨
    설명

    O2A00

    ERROR

    동시 구독 세션 개수를 초과합니다.

    (동시에 이벤트를 구독할 수 있는 세션의 최대 개수는 총 64개)

    O2A01

    ERROR

    이벤트 이름은 NULL 값이 허용되지 않습니다.

    에러 코드
    로그 레벨
    설명

    O2B00

    ERROR

    라이센스 인증에 실패했습니다.

    02B01

    ERROR

    라이센스 파일을 찾을 수 없습니다.

    에러 코드
    로그 레벨
    설명

    O2D00

    ERROR

    DBMS_JOB 기능 동작 수행 중 발생한 내부 동작 에러입니다.

    O2D01

    ERROR

    입력한 id에 해당하는 job이 존재하지 않습니다.

    에러 코드
    로그 레벨
    설명

    O2FD0

    ERROR

    유효하지 않은 날짜 형식입니다. 를 참조합니다.

    O2FD3

    ERROR

    EXISTSNODE 함수에 유효하지 않은 namespace format의 인자가 전달됐습니다.

    에러 코드
    로그 레벨
    설명

    O2H00

    ERROR

    불충분한 권한

    O2H01

    ERROR

    해당 정책이 존재하지 않습니다.

    에러코드
    로그 레벨
    설명

    O2J00

    ERROR

    o2scheduler 내부 동작 에러

    O2J01

    WARNING

    job launcher 프로세스 등록 실패

    에러 코드
    로그 레벨
    설명

    O2L01

    ERROR

    유효하지 않은 파일 동작입니다. 파일 열기 실패 혹은 파일 읽기, 쓰기 권한이 없습니다.

    O2L02

    ERROR

    파일 읽기 실패

    에러 코드
    로그 레벨
    설명

    O2P00

    ERROR

    파이프 이름은 NULL을 허용하지 않습니다.

    O2P01

    ERROR

    입력한 이름의 파이프가 이미 존재합니다.

    에러 코드
    로그 레벨
    설명

    O2Q00

    ERROR

    DBMS_SQL.column_value 프로시저의 value 파라미터의 data type과 쿼리 결과 컬럼의 data type 간 type conversion이 불가능합니다.type conversion이 가능한 data type의 파라미터로 변경해야합니다.

    O2Q01

    ERROR

    DBMS_SQL.define_column 혹은 DBMS_SQL.define_array 프로시저에서 이미 define된 컬럼을 재정의합니다.

    에러 코드
    로그 레벨
    설명

    O2R00

    ERROR

    DBMS_RANDOM.string 함수에 입력한 문자열 형식이 유효하지 않습니다.

    O2R01

    ERROR

    DBMS_RANDOM.string 함수에 입력한 문자열 형식은 NULL을 허용하지 않습니다.

    에러 코드
    로그 레벨
    설명

    O2S00

    ERROR

    입력한 문자열(schema name)은 형식이 유효하지 않습니다.

    O2S01

    ERROR

    입력한 문자열(sql name)은 형식이 유효하지 않습니다.

    에러 코드
    로그 레벨
    설명

    O2U01

    ERROR

    DBMS_OUTPUT 내부 버퍼 사이즈 한도 초과 에러입니다. DBMS_OUTPUT.enable 실행 시 버퍼 사이즈를 무한이 아닌 값으로 지정한 상황에서 DBMS_OUTPUT.put, DBMS_OUTPUT.put_line, DBMS_OUTPUT.new_line 프로시저를 통해 입력한 데이터는 버퍼 사이즈 한도 초과로 더이상 버퍼에 넣을 수 없습니다.

    에러 코드
    로그 레벨
    설명

    O2V00

    ERROR

    버전 파일을 찾을 수 없습니다.PostgreSQL의 Extension 설치 디렉토리에 O2 Extension의 버전 파일을 찾을 수 없습니다.

    에러 코드
    로그 레벨
    설명

    O2XM0

    DEBUG2

    메모리 할당을 기록하기 위한 디버깅 로그입니다.

    O2XP0

    DEBUG1

    DBMS_PIPE의 파이프가 묵시적으로 생성됨을 기록하기 위한 디버깅 로그입니다. DBMS_PIPE.send_message 또는 DBMS_PIPE.receive_message 함수를 통해 파이프가 묵시적으로 생성될 수 있습니다.

    O2001

    개요

    에러 코드

    카테고리 ‘0’ - 공통 에러

    PostgreSQL Error Codes

    ERROR

    카테고리 ‘A’ - DBMS_ALERT 에러

    카테고리 ‘B’ - License 에러

    카테고리 ‘D’ - DBMS_JOB 에러

    카테고리 ‘F’ - O2Functions 에러

    카테고리 ‘H’ - DBMS_RLS 에러

    카테고리 ‘J’ - O2Scheduler 에러

    카테고리 ‘L’ - UTL_FILE 에러

    카테고리 ‘P’ - DBMS_PIPE 에러

    카테고리 ‘Q’ - DBMS_SQL 에러

    카테고리 ‘R’ - DBMS_RANDOM 에러

    카테고리 ‘S’ - DBMS_ASSERT 에러

    카테고리 ‘U’ - DBMS_OUTPUT 에러

    카테고리 ‘V’ - O2Views 에러

    카테고리 ‘X’ - Debug 에러

    USERNAME

    TEXT

    O

    JOB의 소유자입니다.

    COMMAND_EXPR

    TEXT

    X

    JOB이 수행할 작업의 내용입니다.

    COMMAND_TYPE

    TEXT

    X

    JOB이 수행할 작업의 유형입니다.

    SCHEDULE_EXPR

    TEXT

    O

    JOB의 다음 수행시각 계산식입니다.

    SCHEDULE_TYPE

    TEXT

    O

    JOB의 다음 수행시각 계산 유형입니다.

    SCHEDULE_TIME

    TEXT

    O

    JOB의 예정 수행시각이다; null일 경우 job을 실행하지 않습니다.

    CREATED_AT

    TIMESTAMPTZ

    O

    now()

    JOB 생성 시각입니다.

    UPDATED_AT

    TIMESTAMPTZ

    O

    now()

    JOB 갱신 시각입니다.

    DELETED_AT

    TIMESTAMPTZ

    O

    JOB 삭제 시각입니다; not null일 경우 실행하지 않습니다.

    JOB_ID

    INTEGER

    O

    JOB의 식별번호이다.; JOB 테이블의 ID와 동일합니다.

    WORKER_PID

    INTEGER

    O

    JOB을 수행한 프로세스의 PID입니다.

    USERNAME

    TEXT

    O

    JOB을 수행한 사용자입니다.

    STATUS

    TEXT

    O

    JOB 수행 상태입니다.; success/failed/running

    MESSAGE

    TEXT

    O

    JOB 수행 후 추가 메세지입니다.

    START_TIME

    TEXT

    O

    JOB의 실제 수행 시작 시각입니다.

    END_TIME

    TEXT

    O

    JOB의 실제 수행 종료 시각입니다.

    SCHEDULE_TIME

    TEXT

    O

    JOB의 예정 되었었던 수행 시작 시각입니다.

    FAILED_COUNT

    INTEGER

    X

    JOB이 실패한 횟수입니다.

    UPDATED_AT

    TIMESTAMPTZ

    X

    마지막으로 작업이 실패한 시간입니다.

    JOB_NAME

    TEXT

    X

    JOB의 이름입니다.

    SCHEDULE_NAME

    TEXT

    X

    JOB의 SCHEDULE 이름입니다.

    JOB_CLASS

    TEXT

    O

    DEFAULT_JOB_CLASS

    JOB_CLASS의 이름입니다.

    ORACLE과 호환성을 위해 존재하며 사용되지는 않습니다.

    ENABLED

    BOOLEAN

    O

    FALSE

    JOB의 활성화 여부입니다.

    AUTO_DROP

    BOOLEAN

    O

    TRUE

    AUTO_DROP이 T RUE일 때, JOB이 완전히 종료되면 JOB이 삭제됩니다.

    CASCADE

    BOOLEAN

    O

    FALSE

    CASCADE가 TRUE이면, JOB이 삭제될 때 SCHEDULE도 삭제됩니다.

    COMMENTS

    TEXT

    O

    JOB에 대한 설명입니다.

    ARGUMENT_POSITION

    INTEGER

    X

    ARGUMENT의 위치입니다.

    ARGUMENT_NAME

    TEXT

    O

    ARGUMENT의 이름입니다.

    ARGUMENT_VALUE

    TEXT

    X

    ARGUMENT의 값입니다.

    OWNER

    OID

    O

    현재 사용자의 OID

    PROGRAM을 생성한 사용자의 OID입니다.

    PROGRAM_NAME

    TEXT

    X

    PROGRAM의 이름입니다.

    PROGRAM_TYPE

    TEXT

    X

    PROGRAM의 타입입니다.

    • PLSQL_BLOCK

    • STORED_PROCEDURE

    PROGRAM_ACTION

    TEXT

    X

    PROGRAM의 동작입니다.

    • PROGRAM_TYPE이 PLSQL_BLOCK일 경우, PLSQL_BLOCK의 내용이 들어갑니다.

    • PROGRAM_TYPE이 STORED_PROCEDURE인 경우, PROCEDURE의 이름이 들어갑니다.

    NARGS

    INTEGER

    O

    0

    PROGRAM_TYPE이 STORED_PROCEDURE인 경우 PROCEDURE의 인자의 개수입니다.

    ENABLED

    BOOLEAN

    O

    FALSE

    PROGRAM의 활성화 여부입니다.

    COMMENTS

    TEXT

    O

    PROGRAM에 대한 설명입니다.

    ARGUMENT_POSITION

    INTEGER

    X

    ARGUMENT의 위치입니다.

    ARGUMENT_NAME

    TEXT

    O

    ARGUMENT의 이름입니다.

    ARGUMENT_TYPE

    TEXT

    X

    ARGUMENT의 타입입니다.

    DEFAULT_VALUE

    TEXT

    O

    ARGUMENT의 기본값입니다.

    OUT_ARGUMENT

    BOOLEAN

    O

    FALSE

    인자의 OUT PARAMETER 여부입니다.

    ORACLE과의 호환성을 위해 존재합니다. 사용되지는 않습니다.

    SCHEDULE_NAME

    TEXT

    X

    SCHEDULE의 이름입니다.

    START_DATE

    TIMESTAMP

    O

    SCHEDULE의 시작 일자입니다.

    REPEAT_INTERVAL

    TEXT

    O

    JOB이 실행되는 주기입니다.

    • null일 경우한번만 실행됩니다.

    • regular_schedule이나 combined_schedule이 들어올 수 있습니다.

      • regular_schedule : calendar_string으로 이루어진 문자열입니다.

      • combined_schedule : schedule의 이름입니다.

        'schedule1' (', schedule2', ...)

    END_DATE

    TIMESTAMPTZ

    O

    SCHEDULE의 만료 일자입니다. null이 들어올 경우 종료되지 않습니다.

    COMMENTS

    TEXT

    O

    SCHEDULE에 대한 설명입니다.

    BYMONTH

    BYMONTH=month(,month ...)

    월의 숫자 표현입니다; 1,2,3,4,5,6,7,8,9,10,11,12

    BYMONTHDAY

    BYMONTHDAY=day_of_month

    1부터 31까지의 숫자입니다.

    BYDAY

    BYDAY=weekday

    요일의 표현입니다. 3글자 약어나 요일의 숫자 표현으로도 사용 가능합니다.

    Monday

    BYDATE

    BYDATE=date(, date ...)

    date의 형식이 YYYYMMDD 로 사용할 수 있습니다.

    BYDATE

    BYDATE=date(, date ...)

    date의 형식이 MMDD 로 사용할 수 있습니다.

    BYHOUR

    BYHOUR=hour

    0부터 23까지의 숫자입니다.

    BYMINUTE

    BYMINUTE=minute

    0부터 59까지의 숫자입니다.

    BYSECOND

    BYSECOND=second

    0부터 59까지의 숫자입니다.

    number_of_arguments

    작업에서 인수 개수를 지정하는 정수 값이다. 기본 값은 0입니다.

    start_date

    작업이 처음 실행될 시간입니다. 기본 값은 NULL입니다.

    start_date가 지정되지 않은 경우, 작업이 활성화되면 즉시 실행되도록 스케줄링됩니다.

    repeat_interval

    작업이 얼마나 반복되는지 지정하는 값입니다. repeat_interval을 지정하지 않으면 작업은 한 번만 실행됩니다.

    기본 값은 NULL입니다.

    end_date

    작업이 더 이상 실행되지 않는 시간입니다.

    날짜를 지정하는 경우 end_date는 start_date 이후여야 합니다.

    end_date를 지정하지 않고 repeat_interval을 지정한 경우 작업이 비활성화될 때까지 작업이 무한정 반복됩니다.

    job_class

    Oracle과의 호환성을 위해 존재하는 인수입니다.

    enabled

    작업의 활성화 여부입니다.

    auto_drop

    작업이 더 이상 수행될 수 없는 경우 삭제됩니다.

    comments

    작업에 대한 설명입니다.

    nargs

    프로그램이 받는 인수의 개수입니다.

    enabled

    프로그램의 활성화 여부입니다.

    comments

    프로그램에 대한 설명입니다.

    end_date

    스케줄이 더 이상 실행되지 않는 시간입니다.

    end_date는 start_date보다 이후여야 합니다.

    comments

    스케줄에 대한 설명입니다.

    default_value

    인수에 전달될 기본 값입니다.

    JOB이 실행될 때 값을 지정된 상태라면 덮어씌워집니다.

    argument_name

    인수의 이름입니다.

    out_argument

    현재는 사용되지 않습니다. 값이 들어온다면 무조건 FALSE여야 합니다.

    commit_semantics

    작업을 삭제하는 동안 발생하는 에러의 처리 방식입니다.

    • STOP_ON_FIRST_ERROR : 에러 발생 시 즉시 종료(현재 이것만 지원합니다)

    result

    return_date_after 인수로 전달될 값 이후에 발생하는 달력 문자열 및 start_date에 부합하는 첫 번째 시간입니다.

    argument_value

    인수의 새로운 값입니다.

    O2A02

    ERROR

    프로세스가 이벤트를 SUBSCRIBE하고 있지 않습니다.

    O2A03

    ERROR

    동일 트랜잭션 내에서 SIGNAL → WAITONE 또는 WAITANY를 수행이 허용되지 않습니다.

    O2B02

    ERROR

    라이센스가 만료됐습니다.

    O2B03

    ERROR

    라이센스의 시그니처가 잘못됐습니다.

    O2B04

    ERROR

    호스트 이름이 잘못됐습니다.

    O2B05

    ERROR

    IP 검증에 실패했습니다.

    O2B06

    ERROR

    접속 가능한 USER의 수가 라이센스와 다릅니다.

    O2B07

    ERROR

    허용된 CPU 수를 초과합니다.

    O2B08

    ERROR

    잘못된 유효기간입니다.

    O2B11

    ERROR

    라이센스 검증 로직의 내부 오류입니다.

    O2H02

    ERROR

    해당 테이블이 존재하지 않습니다.

    O2H03

    ERROR

    정책함수가 유효하지 않거나, 정책 함수의 스키마가 존재하지 않거나, 테이블당 최대 정책 수를 초과하거나, 해당 정책은 이미 존재하거나, SPI 연결이 실패합니다.

    에러 메시지 참고가 필요합니다.

    O2H04

    ERROR

    o2type extension이 설치 되지 않아, varchar2 타입이 존재하지 않습니다.

    O2H05

    ERROR

    PostgreSQL 버전이 15이하로

    해당 기능을 지원하지 않습니다.

    O2H06

    ERROR

    INSERT에 대한 정책 추가 시, update_check가 true 여야 합니다.

    O2J02

    WARNING

    job launcher 프로세스 해제 실패

    O2J03

    WARNING

    job worker 프로세스 등록 실패

    O2J04

    ERROR

    job worker 프로세스 내부 동작 에러

    O2J05

    WARNING

    job bootstrapper 프로세스 등록 실패

    O2J06

    ERROR

    job trigger 내부 동작 에러

    O2J10

    ERROR

    CALENDER STRING의 옵션 중복

    O2J11

    ERROR

    PROGRAM을 찾을 수 없습니다.

    O2J12

    ERROR

    잘못된 PROGRAM 타입

    O2J13

    ERROR

    인자를 찾을 수 없습니다.

    O2J14

    ERROR

    인자의 개수와 정의된 인자의 개수가 맞지 않습니다.

    O2J15

    ERROR

    PROGRAM 수행 실패

    O2J16

    ERROR

    SCHEDULE을 찾을 수 없습니다.

    O2J17

    ERROR

    TABLE을 찾을 수 없습니다.

    O2J18

    ERROR

    JOB을 찾을 수 없습니다.

    O2J19

    ERROR

    PROGRAM ARGUMENT를 찾을 수 없습니다.

    O2J20

    ERROR

    정의되지 않은 ARGUMENT

    O2J21

    ERROR

    PROGRAM이 이미 존재합니다.

    O2J22

    ERROR

    SCHEDULE이 이미 존재합니다.

    O2J23

    ERROR

    SCHEDULE 내부 오류입니다.

    O2J24

    ERROR

    JOB이 이미 존재합니다.

    O2J25

    INFO

    JOB이 실행 중입니다.

    O2J26

    ERROR

    ARGUMENT가 이미 정의되었습니다.

    O2L03

    ERROR

    파일 쓰기 실패

    O2L04

    ERROR

    파일 열기 개수 한도 초과 정해진 파일 열기 개수 제한 도달

    O2L05

    ERROR

    유효하지 않은 파일 슬롯(열려 있는 파일에 대한 unique file id을 지칭)입니다.

    O2L06

    ERROR

    파일 슬롯 혹은 파일 에러가 발생했습니다.

    O2L07

    ERROR

    UTL_FILE 패키지 내부, 파일 이름 유효 검사 처리과정 에러가 발생했습니다.

    O2L08

    ERROR

    file path가 유효하지 않습니다.

    O2L10

    ERROR

    파일 쓰기에서 한 줄 당 크기 한도 초과

    O2P02

    ERROR

    로컬 메시지 버퍼 용량을 초과했습니다.

    로컬 메시지 버퍼가 다 찰 때까지 DBMS_PIPE.pack_message 프로시저를 호출할 수 있습니다.

    로컬 메시지 버퍼가 다 차서 해당 에러가 발생한 경우, 사용자는 DBMS_PIPE.reset_buffer 프로시저 또는 DBMS_PIPE.send_message 함수를 사용하여 로컬 메시지 버퍼를 비워줘야 합니다.

    (로컬 메시지 버퍼의 용량은 4096 바이트)

    O2P03

    ERROR

    로컬 메시지 버퍼가 비어 있습니다.

    로컬 메시지 버퍼가 비어 있을 때 DBMS_PIPE.unpack_message 프로시저를 호출 할 경우 해당 에러가 발생합니다.

    O2P04

    ERROR

    로컬 메시지 아이템과 상이한 데이터 입니다DBMS_PIPE.unpack_message 프로시저에 입력한 OUT 파라미터의 데이터 타입과 로컬 메시지 아이템의 데이터 타입이 상이합니다.DBMS_PIPE.next_item_type 함수를 통해 다음 아이템의 데이터 타입을 조회하여 알맞은 OUT 파라미터를 입력해야 합니다.

    O2Q02

    ERROR

    DBMS_SQL.define_array 프로시저의 value 파라미터가 array data type이 아닙니다.

    O2Q03

    ERROR

    DBMS_SQL.bind_array 프로시저의 value 파라미터가 array data type이 아닙니다.

    O2Q04

    ERROR

    DBMS_SQL.describe_columns 프로시저의 OUT 파라미터의 data type이 잘못됐습니다.

    O2Q05

    ERROR

    DBMS_SQL.describe_columns 프로시저의 desc_t OUT 파라미터의 data type이 array가 아닙니다.

    O2Q06

    ERROR

    DBMS_SQL.describe_columns 프로시저 수행 시점에 bind variable되지 않은 파라미터가 있습니다.

    O2Q07

    ERROR

    DBMS_SQL 프로시저/함수 수행 중 내부 에러가 발생했습니다.

    O2Q08

    ERROR

    DBMS_SQL.open_cursor로 열려 있는 커서 개수가 100개를 초과했습니다.

    O2Q09

    ERROR

    DBMS_SQL.execute 혹은 DBMS_SQL.execute_and_fetch 함수로 SQL문을 실행하지 않은 상태에서 DBMS_SQL.fetch_rows 함수 혹은 DBMS_SQL.column_value 프로시저를 수행했습니다.

    O2Q10

    ERROR

    DBMS_SQL.execute_and_fetch 함수에서 exact파라미터를 true로 하여 수행한 SELECT문 결과의 row 갯수가 1개보다 많습니다.

    O2Q11

    ERROR

    DBMS_SQL.bind_array 함수에서 array 내 지정한 범위값(index1, index2)이 실제 저장된 array element 갯수 범위를 벗어났습니다.

    O2Q12

    ERROR

    Define되지 않은 컬럼에 대한 fetch 요청이 발생했습니다.

    O2S02

    ERROR

    입력한 문자열(simple sql name)은 형식이 유효하지 않습니다.

    O2S03

    ERROR

    입력한 문자열(object name)은 형식이 유효하지 않습니다.

    O2XP1

    DEBUG1

    DBMS_PIPE에서 시간 초과 발생을 기록하기 위한 디버깅 로그입니다. DBMS_PIPE.send_message 또는 DBMS_PIPE.receive_message 함수에서 타임아웃이 발생할 수 있습니다.

    O2XP2

    DEBUG1

    DBMS_PIPE에서 파이프가 제거됨을 기록하기 위한 디버깅 로그입니다. 묵시적으로 생성된 파이프가 비었거나 사용자가 명시적으로 제거 명령을 실행했을 때 파이프 제거가 발생했습니다.

    O2XP3

    DEBUG1

    DBMS_PIPE에서 파이프로부터 분리되었음을 기록하기 위한 디버깅 로그입니다. 파이프에 대한 동작을 마무리한 후 프로세스가 파이프로부터 분리되었습니다.

    O2XO0

    DEBUG1

    DBMS_OUTPUT에서 버퍼의 사이즈가 변동되었음을 기록하기 위한 디버깅 로그입니다.

    O2XO1

    DEBUG1

    DBMS_OUTPUT에서 DBMS_OUTPUT.serveroutput 파라미터가 변동되었음을 기록하기 위한 디버깅 로그입니다.

    SQL Function 참조 안내서

    뷰(View) 참조 안내서

    뷰에 대한 참조 안내서입니다.

    o2views extension 설치 후 신규 뷰들이 추가되며, 아래의 2가지 형식으로 사용하여야 합니다.

    search_path를 설정하지 않은 경우

    스키마(기본 oracle)의 이름을 View 앞에 추가하여 사용합니다.

    {schema_name}.{view_name}
    
    -- 예시) o2views extension 설치 후, 새로 추가된 dba_tab_columns라는 뷰 사용합니다.
    -- select * from oracle.dba_tab_columns;
    

    search_path를 설정한 경우

    스키마(기본 oracle)를 가장 높은 우선순위 search_path로 설정한 경우, 스키마를 생략하고 사용할 수 있습니다.

    -- 현재 접속 세션에서 스미카 'oracle'를 가장 우선순위 높은 search_path로 설정합니다.
    set search_path to oracle, public;
    
    {view_name}
    
    -- 예시) o2views extension 설치 후, 새로 추가된 dba_tab_columns라는 뷰 사용합니다.
    -- select * from dba_tab_columns;

    아래 사양들은 스키마를 생략한 형태로 기술합니다.

    ALL_COL_PRIVS

    ALL_COL_PRIVS는 다음 유형의 권한을 보여줍니다.

    • 현재 유저가 객체의 소유자, 권한 부여자 또는 권한 피부여자인 컬럼 객체 권한

    • 활성화된 Role이나 PUBLIC이 권한 피부여자인 컬럼 객체 권한

    컬럼
    타입
    설명

    ALL_CONS_COLUMNS는 현재 사용자가 접근할 수 있고 Constraint에 지정된 컬럼들을 보여줍니다.

    컬럼
    타입
    설명

    ALL_CONSTRAINTS는 현재 사용자가 접근 가능한 테이블에 대한 Constraint 정의를 보여줍니다.

    컬럼
    타입
    설명

    ALL_INDEXES는 현재 사용자가 접근 가능한 테이블에 존재하는 인덱스에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    ALL_IND_COLUMNS은 현재 사용자가 접근 가능한 테이블에 정의된 인덱스를 구성하는 컬럼들의 정보를 보여줍니다.

    컬럼
    타입
    설명

    ALL_OBJECTS는 데이터베이스에 존재하는 모든 객체에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    ALL_PART_TABLES는 현재 사용자가 접근할 수 있는 파티션 테이블의 객체 수준 파티셔닝 정보를 보여줍니다.

    컬럼
    타입
    설명

    ALL_SOURCE를 통해 함수, 프로시저, 트리거, 패키지 명세, 패키지 본문 등 다양한 프로그램 유형의 소스 코드를 보여줍니다.

    컬럼
    타입
    설명

    ALL_TABLES는 현재 사용자가 액세스할 수 있는 모든 테이블을 보여줍니다.

    컬럼
    타입
    설명

    ALL_TAB_COLUMNS는 현재 사용자가 접근할 수 있는 테이블, 뷰, 클러스터의 컬럼들을 보여줍니다.

    컬럼
    타입
    설명

    ALL_TAB_PARTITIONS는 현재 사용자가 접근할 수 있는 파티션에 대해 파티션 레벨의 파티셔닝 정보, 파티션 저장 매개변수를 보여줍니다.

    컬럼
    타입
    설명

    ALL_TAB_PRIVS는 다음 유형의 권한을 보여줍니다.

    • 현재 유저가 객체의 소유자, 권한 부여자 또는 권한 피부여자인 테이블 객체 권한

    • 활성화된 Role이나 PUBLIC이 권한 피부여자인 테이블 객체 권한

    컬럼
    타입
    설명

    ALL_TRIGGERS는 현재 사용자가 액세스할 수 있는 모든 트리거를 표시합니다.

    컬럼
    타입
    설명

    ALL_TYPES는 현재 사용자가 액세스할 수 있는 모든 유형을 표시합니다.

    컬럼
    타입
    설명

    ALL_USERS는 현재 사용자에게 보이는 데이터베이스의 모든 사용자를 보여줍니다.

    컬럼
    타입
    설명

    ALL_VIEWS는 사용자 정의된 모든 뷰들에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    DBA_CONS_COLUMNS는 Database 내 제약 조건이 설정된 모든 컬럼을 보여줍니다.

    컬럼
    타입
    설명

    DBA_COL_PRIVS는 Database 내 모든 컬럼 객체 권한을 보여줍니다.

    컬럼
    타입
    설명

    DBA_CONSTRAINTS는 Database 내 모든 테이블의 모든 제약 조건 정의를 보여줍니다.

    컬럼
    타입
    설명

    DBA_INDEXES는 Database에 존재하는 모든인덱스에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    DBA_IND_COLUMNS은 Database 내 모든테이블에 정의된 인덱스를 구성하는 컬럼들의 정보를 보여줍니다.

    컬럼
    타입
    설명

    DBA_OBJECTS는 데이터베이스에 존재하는 모든 객체에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    DBA_PART_TABLES는 데이터베이스에 존재하는 모든 파티션 테이블의 정보를 보여줍니다.

    컬럼
    타입
    설명

    DBA_PROCEDURES는 사용 가능한 모든 함수와 프로시저를 연관된 속성과 함께 보여줍니다.

    컬럼
    타입
    설명

    DBA_ROLES는 데이터베이스 내의 모든 ROLE을 보여줍니다.

    컬럼
    타입
    설명

    DBA_ROLE_PRIVS는 사용자에게 할당된 모든 역할에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    DBA_SOURCE를 통해 함수, 프로시저, 트리거, 패키지 명세, 패키지 본문 등 다양한 프로그램 유형의 소스 코드를 보여줍니다.

    컬럼
    타입
    설명

    DBA_TAB_COLUMNS는 Database 내 모든 테이블, 뷰들의 컬럼을 보여줍니다.

    컬럼
    타입
    설명

    DBA_TAB_PARTITIONS는 모든 파티션에 대해 파티션 레벨의 파티셔닝 정보, 파티션 저장 매개변수를 보여줍니다.

    컬럼
    타입
    설명

    DBA_TAB_PRIVS는 Database 내 모든 테이블의 권한을 보여줍니다.

    컬럼
    타입
    설명

    DBA_TABLES는 데이터베이스의 모든 테이블을 보여줍니다.

    컬럼
    타입
    설명

    DBA_TRIGGERS는 데이터베이스의 모든 트리거를 표시합니다.

    컬럼
    타입
    설명

    DBA_TYPES는 모든 유형을 표시합니다.

    컬럼
    타입
    설명

    DBA_USERS는 Database 내 모든 유저의 이름에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    DBA_VIEWS는 Database 내사용자 정의된 모든 뷰들에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    DUAL 테이블은 다른 테이블을 참조하지 않는 SELECT 문에서 사용할 수 있으며, 최소한 한 개의 행을 반환해야 할 때 유용합니다. DUAL 테이블에서 선택하는 것은 SELECT 문을 사용하여 상수 표현식을 계산할 때 유용합니다. DUAL 테이블에는 단 하나의 행만 존재하므로, 상수 값은 한 번만 반환됩니다.

    컬럼
    타입
    설명

    각 O2 extension과 O2의 버전 정보와 업데이트 시점을 출력하는 뷰입니다.

    컬럼
    타입
    설명

    O2_MEMORY_CONTEXT_INFO는 O2에서 사용하는 메모리 컨텍스트 정보를 제공하는 뷰입니다.

    컬럼
    타입
    설명

    O2_SHARED_MEMORY_INFO는 SHARED MEMORY 사용량을 보여주는 뷰입니다.

    컬럼
    타입
    설명

    PRODUCT_COMPONENT_VERSION은 구성 요소 제품에 대한 버전과 상태에 대한 뷰입니다.

    컬럼
    타입
    설명

    USER_COL_PRIVS는 현재 유저가 객체의 소유자, 권한 부여자 또는 권한 피부여자인 컬럼 객체 권한을 보여줍니다.

    컬럼
    타입
    설명

    USER_CONS_COLUMNS는 현재 사용자가 소유하고 있고 Constraint에 지정된 컬럼들을 보여줍니다.

    컬럼
    타입
    설명

    USER_CONSTRAINTS는 현재 사용자가 소유한 테이블에 대한 Constraint 정의를 보여줍니다.

    컬럼
    타입
    설명

    USER_INDEXES는 현재 사용자가 소유한 테이블에 존재하는 인덱스에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    USER_IND_COLUMNS은 현재 사용자가 소유한 테이블에 정의된 인덱스를 구성하는 컬럼들의 정보를 보여줍니다.

    컬럼
    타입
    설명

    USER_OBJECTS는 현재 유저가 소유한 객체에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    USER_PART_TABLES는 현재 사용자가 소유한 파티션 테이블의 객체 수준 파티셔닝 정보를 보여줍니다.

    컬럼
    타입
    설명

    USER_ROLE_PRIVS는 현재 사용자에게 부여된 권한에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    USER_SOURCE를 통해 함수, 프로시저, 트리거, 패키지 명세, 패키지 본문 등 다양한 프로그램 유형의 소스 코드를 보여줍니다.

    컬럼
    타입
    설명

    USER_TABLES는 현재 사용자가 소유한 모든 테이블을 보여줍니다.

    컬럼
    타입
    설명

    USER_TAB_COLUMNS는 현재 사용자가 소유한 테이블, 뷰, 클러스터의 컬럼들을 보여줍니다.

    컬럼
    타입
    설명

    USER_TAB_PARTITIONS는 현재 사용자가 소유한 파티션에 대해 파티션 레벨의 파티셔닝 정보, 파티션 저장 매개변수를 보여줍니다.

    컬럼
    타입
    설명

    USER_TAB_PRIVS는 현재 유저가 객체의 소유자인 테이블 권한을 보여줍니다.

    컬럼
    타입
    설명

    USER_TRIGGERS는 현재 사용자가 소유한 모든 트리거를 표시합니다.

    컬럼
    타입
    설명

    USER_TYPES는 현재 사용자가 소유한 모든 유형을 표시합니다.

    컬럼
    타입
    설명

    USER_USERS는 현재 사용자를 보여줍니다.

    컬럼
    타입
    설명

    USER_VIEWS는 현재 유저가 정의한 뷰들에 대한 정보를 보여줍니다.

    컬럼
    타입
    설명

    OWNER

    NAME

    테이블의 소유자의 이름입니다.

    TABLE_SCHEMA

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    PRIVILEGE

    CHARACTER VARYING

    컬럼에 부여된 권한입니다.

    GRANTABLE

    CHARACTER VARYING

    해당 권한을 다른 유저에게 부여가능한지의 여부입니다. (YES/NO)

    COMMON

    CHARACTER VARYING

    권한의 부여 방식입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    INHERITED

    CHARACTER VARYING

    다른 컨테이너에서 상속 받았는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    CONSTRAINT_NAME

    TEXT

    Constraint의 이름입니다.

    TABLE_NAME

    TEXT

    Constraint가 속한 테이블의 이름입니다.

    COLUMN_NAME

    TEXT

    Constraint가 참조하는 컬럼의 이름입니다.

    POSITION

    SMALLINT

    테이블의 정의에서 컬럼의 위치입니다.

    CONSTRAINT_REF

    TEXT

    Constraint의 정의입니다.

    CONSTRAINT_NAME

    TEXT

    Constraint의 이름입니다.

    CONSTRAINT_TYPE

    TEXT

    Constraint의 타입입니다.

    • 'P' : Primary key

    • 'R' : Foreign key

    • 'U' : Unique

    TABLE_NAME

    TEXT

    Constraint가 속한 테이블의 이름입니다.

    SEARCH_CONDITION

    TEXT

    CHECK Constraint에 적용되는 조회 조건입니다.

    R_OWNER

    TEXT

    참조 제약 조건에 의해 참조되는 테이블의 소유자입니다.

    R_CONSTRAINT_NAME

    TEXT

    참조되는 테이블에 대한 제약 조건 정의의 이름입니다.

    DELETE_RULE

    TEXT

    참조 제약조건에 대한 삭제 규칙입니다.

    DEFERRABLE

    BOOLEAN

    제약 조건의 검사 시점이 미룰 수 있는지에 대한 여부입니다. (T/F)

    DEFERRED

    BOOLEAN

    제약 조건의 검사 시점이 미뤄졌는지에 대한 여부입니다. (T/F)

    INDEX_OWNER

    TEXT

    인덱스 소유자의 이름입니다.

    INDEX_NAME

    TEXT

    인덱스의 이름입니다.

    CONSTRAINT_DEF

    TEXT

    Constraint의 정의입니다.

    INDEX_NAME

    TEXT

    인덱스의 이름입니다.

    INDEX_TYPE

    TEXT

    인덱스의 타입입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'BTREE'을 반환합니다.

    TABLE_OWNER

    TEXT

    인덱스가 걸린 테이블의 소유자입니다.

    TABLE_NAME

    TEXT

    인덱스가 걸린 테이블의 이름입니다.

    TABLE_TYPE

    TEXT

    테이블의 타입입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'TABLE'을 반환합니다.

    UNIQUENESS

    TEXT

    인덱스가 유니크한지에 대한 여부입니다.

    • UNIQUE/NONUNIQUE

    COMPRESSION

    TEXT

    인덱스의 압축 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'n'을 반환합니다.

    TABLESPACE_NAME

    TEXT

    테이블이 기본 테이블스페이스에 있지 않은 경우, 해당 테이블이 위치하는 테이블스페이스의 이름입니다.

    DEGREE

    INTEGER

    인덱스를 스캔하기 위한 인스턴스 당 스레드의 수입니다.

    LOGGING

    TEXT

    인덱스 변경 사항이 기록되는지 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'LOGGING'을 반환합니다.

    STATUS

    TEXT

    파티셔닝되지 않은 인덱스의 사용 가능 여부입니다.

    PARTITIONED

    TEXT

    파티셔닝 되었는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TEMPORARY

    TEXT

    인덱스가 임시 테이블에 존재하는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'n'을 반환합니다.

    SECONDARY

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    JOIN_INDEX

    TEXT

    인덱스가 조인 인덱스인지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    DROPPED

    TEXT

    인덱스가 삭제되었는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TABLE_OWNER

    NAME

    테이블 소유자의 이름입니다.

    COLUMN_POSITION

    SMALLINT

    인덱스에서 컬럼의 위치입니다.

    COLUMN_LENGTH

    SMALLINT

    컬럼의 길이입니다. (단위 : byte)

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    CHAR_LENGTH

    INTEGER

    컬럼이 가질 수 있는 최대 길이입니다.

    INDEX_NAME

    NAME

    인덱스의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    DESCEND

    TEXT

    컬럼이 내림차순으로 정렬되어 있는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    CREATED

    TIMESTAMP

    오브젝트의 생성 일시입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LAST_DDL_TIME

    TIMESTAMP

    객체에 대한 마지막 변경 사항(권한 부여 및 취소 포함)이 DDL 문에 의해 발생한 시간입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    OWNER

    NAME

    오브젝트의 소유자 이름입니다.

    SCHEMA_NAME

    NAME

    오브젝트가 속한 스키마의 이름입니다.

    STATUS

    TEXT

    객체가 유효한 상태인지의 여부입니다.

    TEMPORARY

    TEXT

    임시 객체인지에 대한 여부입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    PARTITIONING_TYPE

    TEXT

    파티셔닝 방식입니다.

    • RANGE, LIST, HASH

    SUBPARTITIONING_TYPE

    TEXT

    복합 파티셔닝 방식입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않습니다.

    • 항상 'NONE'을 반환합니다.

    PARTITION_COUNT

    BIGINT

    파티션의 개수입니다.

    DEF_SUBPARTITION_COUNT

    INTEGER

    기본 서브 파티션의 개수입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않습니다.

    • 항상 0을 반환합니다.

    PARTITIONING_KEY_COUNT

    INTEGER

    PARTITION BY 구문에 명시된 컬럼의 개수입니다.

    SUBPARTITIONING_KEY_COUNT

    INTEGER

    SUBPARTITION BY 구문에 명시된 컬럼의 개수입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않습니다.

    • 항상 0을 반환합니다.

    STATUS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'VALID'를 반환합니다.

    DEF_TABLESPACE_NAME

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_PCT_FREE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_PCT_USED

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_INI_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_MAX_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_INITIAL_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_NEXT_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다..

    • 항상 NULL을 반환합니다.

    DEF_MIN_EXTENTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_MAX_EXTENTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_FREELISTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_FREELIST_GROUPS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_LOGGING

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    DEF_COMPRESSION

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NONE'을 반환합니다.

    DEF_BUFFER_POOL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'DEFAULT'를 반환합니다.

    REF_PTN_CONSTRAINT_NAME

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INTERVAL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    NAME

    NAME

    프로그램의 이름입니다.

    TYPE

    TEXT

    프로그램의 타입입니다.

    • PROCEDURE, FUNCTION, TRIGGER

    LINE

    INTEGER

    해당 프로그램 기준으로 계산된 소스 코드 줄 번호입니다.

    TEXT

    TEXT

    소스 코드입니다.

    TABLE_NAME

    NAME

    테이블 이름입니다.

    TABLESPACE_NAME

    NAME

    테이블이 포함된 테이블스페이스의 이름입니다..

    STATUS

    TEXT

    테이블의 사용 가능 여부입니다.

    TEMPORARY

    TEXT

    임시 테이블 여부입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    DATA_TYPE

    NAME

    컬럼의 데이터 타입입니다.

    DATA_LENGTH

    INTEGER

    TEXT 컬럼의 길이입니다.

    DATA_PRECISION

    INTEGER

    NUMBER 컬럼의 정밀도입니다.

    DATA_SCALE

    INTEGER

    NUMBER 컬럼의 배율입니다.

    NULLABLE

    TEXT

    컬럼의 NULL 가능 여부입니다.

    • 컬럼이 NULL이 될 수 있으면 : 'Y'

    • 컬럼에 NULL이 허용되지 않으면 : 'N'

    COLUMN_ID

    SMALLINT

    테이블이나 뷰에서 컬럼의 상대적인 위치입니다.

    DATA_DEFAULT

    TEXT

    컬럼에 할당된 기본 값입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    COMPOSITE

    TEXT

    테이블이 복합 파티셔닝 되었는지에 대한 여부입니다.

    PARTITION_NAME

    NAME

    파티션의 이름입니다.

    SUBPARTITION_COUNT

    BIGINT

    서브파티션의 개수입니다.

    HIGH_VALUE

    TEXT

    파티션 경계값 표현식입니다.

    HIGH_VALUE_LENGTH

    INTEGER

    파티션 경계값 표현식의 길이입니다.

    PARTITION_POSITION

    INTEGER

    이 파티션이 몇 번째 파티션인지 나타내는 순서입니다.

    TABLESPACE_NAME

    NAME

    파티션이 속한 테이블스페이스의 이름입니다.

    PCT_FREE

    INTEGER

    블록 내 최소 여유 공간 비율입니다.

    PCT_USED

    TEXT

    블록 내 최소 사용 공간 비율입니다.

    INI_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MAX_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INITIAL_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    NEXT_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MIN_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MAX_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    PCT_INCREASE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    FREELISTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    FREELIST_GROUPS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LOGGING

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    COMPRESSION

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NONE'을 반환합니다.

    NUM_ROWS

    DOUBLE PRECISION

    파티션 내 행의 대략적인 개수입니다.

    BLOCKS

    DOUBLE PRECISION

    파티션 내 블럭의 대략적인 개수입니다.

    EMPTY_BLOCKS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    AVG_SPACE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    CHAIN_CNT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    AVG_ROW_LEN

    DOUBLE PRECISION

    파티션 내 행의 평균 길이(Byte)입니다.

    SAMPLE_SIZE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LAST_ANALYZED

    TIMESTAMPTZ

    파티션이 가장 최근에 분석된 날짜입니다.

    BUFFER_POOL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'DEFAULT'를 반환합니다.

    GLOBAL_STATS

    TEXT

    통계 수집 여부입니다.

    USER_STATS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    OWNER

    NAME

    테이블을 소유한 사람의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    PRIVILEGE

    CHARACTER VARYING

    권한의 이름입니다.

    GRANTABLE

    CHARACTER VARYING

    해당 권한을 다른 유저에게 부여가능한지의 여부입니다. (YES/NO)

    COMMON

    CHARACTER VARYING

    권한의 부여 방식입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    HIERARCHY

    CHARACTER VARYING

    HIERARCHY 옵션과 함께 권한이 부여되었는지에 대한 여부입니다.

    TYPE

    TEXT

    오브젝트의 타입입니다.

    INHERITED

    CHARACTER VARYING

    다른 컨테이너에서 상속 받았는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TRIGGER_NAME

    NAME

    트리거 이름입니다.

    TRIGGER_TYPE

    TEXT

    트리거가 언제 실행되며, 어떤 단위로 동작하는지 표시입니다.

    • 트리거 실행 시점 : BEFORE / INSTEAD OF / AFTER

    • 트리거 실행 단위 : ROW / STATEMENT

    TRIGGERING_EVENT

    TEXT

    트리거가 반응하는 DML 이벤트입니다.

    • INSERT

    • DELETE

    • UPDATE

    TABLE_OWNER

    NAME

    트리거가 설정된 테이블의 소유자 이름입니다.

    BASE_OBJECT_TYPE

    TEXT

    트리거가 걸려 있는 객체의 종류입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'TABLE''을 반환합니다.

    TABLE_NAME

    NAME

    트리거가 설정된 테이블의 이름입니다.

    REFERENCING_NAME

    TEXT

    트리거가 OLD 및 NEW 열 값을 읽기 위해 참조하는 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'REFERENCING NEW AS NEW OLD AS OLD'를 반환합니다.

    STATUS

    TEXT

    트리거의 현재 활성화 여부입니다.

    • ENABLE/DISABLE

    DESCRIPTION

    TEXT

    트리거에 대한 설명입니다.

    TRIGGER_BODY

    TEXT

    트리거가 호출하는 함수의 정의 또는 본문입니다.

    TYPE_NAME

    NAME

    타입 이름입니다.

    TYPE_OID

    OID

    타입 OID입니다.

    TYPECODE

    TEXT

    타입 CODE입니다.

    • OBJECT : 사용자 정의 객체 타입

    • COLLECTION : 배열 타입

      • 현재는 지원하지 않는 타입입니다.

    ATTRIBUTES

    SMALLINT

    타입의 속성 수입니다.

    EXPIRY_DATE

    TIMESTAMPTZ

    계정의 만기일입니다.

    DEFAULT_TABLESPACE

    TEXT

    데이터를 위한 기본 테이블스페이스입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    TEMPORARY_TABLESPACE

    TEXT

    임시 테이블을 위한 기본 테이블스페이스의 이름 또는 테이블스페이스 그룹의 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    CREATED

    TIMESTAMPTZ

    계정이 생성된 날짜입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INITIAL_RSRC_CONSUMER_GROUP

    TEXT

    사용자의 초기 리소스 소비자 그룹입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    EXTERNAL_NAME

    TEXT

    유저의 외부 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    SCHEMA_NAME

    NAME

    뷰가 속한 스키마의 이름입니다.

    TEXT

    CHARACTER VARYING

    뷰를 생성하는 데 사용된 SELECT 문입니다.

    CONSTRAINT_NAME

    TEXT

    Constraint의 이름입니다.

    TABLE_NAME

    TEXT

    Constraint가 속한 테이블의 이름입니다.

    COLUMN_NAME

    TEXT

    Constraint가 참조하는 컬럼의 이름입니다.

    POSITION

    SMALLINT

    테이블의 정의에서 컬럼의 위치입니다.

    CONSTRAINT_REF

    TEXT

    Constraint의 정의입니다.

    OWNER

    NAME

    테이블 소유자의 이름입니다.

    TABLE_SCHEMA

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    PRIVILEGE

    CHARACTER VARYING

    컬럼에 부여된 권한입니다.

    GRANTABLE

    CHARACTER VARYING

    해당 권한을 다른 유저에게 부여가능한지의 여부입니다. (YES/NO)

    COMMON

    CHARACTER VARYING

    권한의 부여 방식입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    INHERITED

    CHARACTER VARYING

    다른 컨테이너에서 상속 받았는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    CONSTRAINT_NAME

    TEXT

    Constraint의 이름입니다.

    CONSTRAINT_TYPE

    TEXT

    Constraint의 타입입니다.

    • 'P' : Primary key

    • 'R' : Foreign key

    • 'U' : Unique

    TABLE_NAME

    TEXT

    Constraint가 속한 테이블의 이름입니다.

    SEARCH_CONDITION

    TEXT

    CHECK Constraint에 적용되는 조회 조건입니다.

    R_OWNER

    TEXT

    참조 제약 조건에 의해 참조되는 테이블의 소유자입니다.

    R_CONSTRAINT_NAME

    TEXT

    참조되는 테이블에 대한 제약 조건 정의의 이름입니다.

    DELETE_RULE

    TEXT

    참조 제약조건에 대한 삭제 규칙입니다.

    DEFERRABLE

    BOOLEAN

    제약 조건의 검사 시점이 미룰 수 있는지에 대한 여부입니다. (T/F)

    DEFERRED

    BOOLEAN

    제약 조건의 검사 시점이 미뤄졌는지에 대한 여부입니다. (T/F)

    INDEX_OWNER

    TEXT

    인덱스 소유자의 이름입니다.

    INDEX_NAME

    TEXT

    인덱스의 이름입니다.

    CONSTRAINT_DEF

    TEXT

    Constraint의 정의입니다.

    INDEX_NAME

    TEXT

    인덱스의 이름입니다.

    INDEX_TYPE

    TEXT

    인덱스의 타입입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'BTREE'을 반환합니다.

    TABLE_OWNER

    TEXT

    인덱스가 걸린 테이블의 소유자입니다.

    TABLE_NAME

    TEXT

    인덱스가 걸린 테이블의 이름입니다.

    TABLE_TYPE

    TEXT

    테이블의 타입입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'TABLE'을 반환합니다.

    UNIQUENESS

    TEXT

    인덱스가 유니크한지에 대한 여부입니다.

    • UNIQUE/NONUNIQUE

    COMPRESSION

    TEXT

    인덱스의 압축 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'n'을 반환합니다.

    TABLESPACE_NAME

    TEXT

    테이블이 기본 테이블스페이스에 있지 않은 경우, 해당 테이블이 위치하는 테이블스페이스의 이름입니다.

    DEGREE

    INTEGER

    인덱스를 스캔하기 위한 인스턴스 당 스레드의 수입니다.

    LOGGING

    TEXT

    인덱스 변경 사항이 기록되는지 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'LOGGING'을 반환합니다.

    STATUS

    TEXT

    파티셔닝되지 않은 인덱스의 사용 가능 여부입니다.

    PARTITIONED

    TEXT

    파티셔닝 되었는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TEMPORARY

    TEXT

    인덱스가 임시 테이블에 존재하는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'n'을 반환합니다.

    SECONDARY

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    JOIN_INDEX

    TEXT

    인덱스가 조인 인덱스인지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    DROPPED

    TEXT

    인덱스가 삭제되었는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TABLE_OWNER

    NAME

    테이블 소유자의 이름입니다.

    COLUMN_POSITION

    SMALLINT

    인덱스에서 컬럼의 위치입니다.

    COLUMN_LENGTH

    SMALLINT

    컬럼의 길이입니다.(단위 : byte)

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    CHAR_LENGTH

    INTEGER

    컬럼이 가질 수 있는 최대 길이입니다.

    INDEX_NAME

    NAME

    인덱스의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    DESCEND

    TEXT

    컬럼이 내림차순으로 정렬되어 있는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    CREATED

    TIMESTAMP

    오브젝트의 생성 일시입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LAST_DDL_TIME

    TIMESTAMP

    객체에 대한 마지막 변경 사항(권한 부여 및 취소 포함)이 DDL 문에 의해 발생한 시간입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    OWNER

    NAME

    오브젝트의 소유자 이름입니다.

    SCHEMA_NAME

    NAME

    오브젝트가 속한 스키마의 이름입니다.

    STATUS

    TEXT

    객체가 유효한 상태인지의 여부입니다.

    TEMPORARY

    TEXT

    임시 객체인지에 대한 여부입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    PARTITIONING_TYPE

    TEXT

    파티셔닝 방식입니다.

    • RANGE, LIST, HASH

    SUBPARTITIONING_TYPE

    TEXT

    복합 파티셔닝 방식입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않습니다.

    • 항상 'NONE'을 반환합니다.

    PARTITION_COUNT

    BIGINT

    파티션의 개수입니다.

    DEF_SUBPARTITION_COUNT

    INTEGER

    기본 서브 파티션의 개수입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않습니다.

    • 항상 0을 반환합니다.

    PARTITIONING_KEY_COUNT

    INTEGER

    PARTITION BY 구문에 명시된 컬럼의 개수입니다.

    SUBPARTITIONING_KEY_COUNT

    INTEGER

    SUBPARTITION BY 구문에 명시된 컬럼의 개수입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않습니다.

    • 항상 0을 반환합니다.

    STATUS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'VALID'를 반환합니다.

    DEF_TABLESPACE_NAME

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_PCT_FREE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_PCT_USED

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_INI_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_MAX_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_INITIAL_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_NEXT_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_MIN_EXTENTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_MAX_EXTENTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_FREELISTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_FREELIST_GROUPS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_LOGGING

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    DEF_COMPRESSION

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NONE'을 반환합니다.

    DEF_BUFFER_POOL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'DEFAULT'를 반환합니다.

    REF_PTN_CONSTRAINT_NAME

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INTERVAL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    AUTHENTICATE_TYPE

    TEXT

    ROLE에 대한 인증 메커니즘입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NONE'을 반환합니다.

    ADMIN_OPTION

    TEXT

    관리 권한을 위임할 수 있는 옵션(admin option)과 함께 부여되었다면 'YES', 그렇지 않다면 'NO'를 표시합니다.

    DEFAULT_ROLE

    TEXT

    권한이 권한 피부여자가 세션 생성할 때 활성화되는지에 대한 여부입니다.

    INHERITED

    TEXT

    부여된 역할의 권한을 자동 상속하는지 여부입니다.

    • PG 16 이상부터 지원됩니다.

    NAME

    TEXT

    프로그램의 이름입니다.

    TYPE

    TEXT

    프로그램의 타입입니다.

    • PROCEDURE, FUNCTION, TRIGGER

    LINE

    INTEGER

    해당 프로그램 기준으로 계산된 소스 코드 줄 번호입니다.

    TEXT

    TEXT

    소스 코드입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    DATA_TYPE

    NAME

    컬럼의 데이터 타입입니다.

    DATA_LENGTH

    INTEGER

    TEXT 컬럼의 길이입니다.

    DATA_PRECISION

    INTEGER

    NUMBER 컬럼의 정밀도입니다.

    DATA_SCALE

    INTEGER

    NUMBER 컬럼의 배율입니다.

    NULLABLE

    TEXT

    컬럼의 NULL 가능 여부입니다.

    • 컬럼이 NULL이 될 수 있으면 : 'Y'

    • 컬럼에 NULL이 허용되지 않으면 : 'N'

    COLUMN_ID

    SMALLINT

    테이블이나 뷰에서 컬럼의 상대적인 위치입니다.

    DATA_DEFAULT

    TEXT

    컬럼에 할당된 기본 값입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    COMPOSITE

    TEXT

    테이블이 복합 파티셔닝 되었는지에 대한 여부입니다.

    PARTITION_NAME

    NAME

    파티션의 이름입니다.

    SUBPARTITION_COUNT

    BIGINT

    서브파티션의 개수입니다.

    HIGH_VALUE

    TEXT

    파티션 경계값 표현식입니다.

    HIGH_VALUE_LENGTH

    INTEGER

    파티션 경계값 표현식의 길이입니다.

    PARTITION_POSITION

    INTEGER

    이 파티션이 몇 번째 파티션인지 나타내는 순서입니다.

    TABLESPACE_NAME

    NAME

    파티션이 속한 테이블스페이스의 이름입니다.

    PCT_FREE

    INTEGER

    블록 내 최소 여유 공간 비율입니다.

    PCT_USED

    TEXT

    블록 내 최소 사용 공간 비율입니다.

    INI_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MAX_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INITIAL_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    NEXT_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MIN_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MAX_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    PCT_INCREASE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    FREELISTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    FREELIST_GROUPS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LOGGING

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    COMPRESSION

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NONE'을 반환합니다.

    NUM_ROWS

    DOUBLE PRECISION

    파티션 내 행의 대략적인 개수입니다.

    BLOCKS

    DOUBLE PRECISION

    파티션 내 블럭의 대략적인 개수입니다.

    EMPTY_BLOCKS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    AVG_SPACE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    CHAIN_CNT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    AVG_ROW_LEN

    DOUBLE PRECISION

    파티션 내 행의 평균 길이(Byte)입니다.

    SAMPLE_SIZE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LAST_ANALYZED

    TIMESTAMPTZ

    파티션이 가장 최근에 분석된 날짜입니다.

    BUFFER_POOL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'DEFAULT'를 반환합니다.

    GLOBAL_STATS

    TEXT

    통계 수집 여부입니다.

    USER_STATS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    OWNER

    NAME

    테이블을 소유한 사람의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    PRIVILEGE

    CHARACTER VARYING

    권한의 이름입니다.

    GRANTABLE

    CHARACTER VARYING

    해당 권한을 다른 유저에게 부여가능한지의 여부입니다. (YES/NO)

    COMMON

    CHARACTER VARYING

    권한의 부여 방식입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    HIERARCHY

    CHARACTER VARYING

    HIERARCHY 옵션과 함께 권한이 부여되었는지에 대한 여부입니다.

    TYPE

    TEXT

    오브젝트의 타입입니다.

    INHERITED

    CHARACTER VARYING

    다른 컨테이너에서 상속 받았는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TABLE_NAME

    NAME

    테이블 이름입니다.

    TABLESPACE_NAME

    NAME

    테이블이 포함된 테이블스페이스의 이름입니다.

    STATUS

    TEXT

    테이블의 사용 가능 여부입니다.

    TEMPORARY

    TEXT

    임시 테이블 여부입니다.

    TRIGGER_NAME

    NAME

    트리거 이름입니다.

    TRIGGER_TYPE

    TEXT

    트리거가 언제 실행되며, 어떤 단위로 동작하는지 표시입니다.

    • 트리거 실행 시점 : BEFORE / INSTEAD OF / AFTER

    • 트리거 실행 단위 : ROW / STATEMENT

    TRIGGERING_EVENT

    TEXT

    트리거가 반응하는 DML 이벤트입니다.

    • INSERT

    • DELETE

    • UPDATE

    TABLE_OWNER

    NAME

    트리거가 설정된 테이블의 소유자 이름입니다.

    BASE_OBJECT_TYPE

    TEXT

    트리거가 걸려 있는 객체의 종류입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'TABLE''을 반환합니다.

    TABLE_NAME

    NAME

    트리거가 설정된 테이블의 이름입니다.

    REFERENCING_NAME

    TEXT

    트리거가 OLD 및 NEW 열 값을 읽기 위해 참조하는 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'REFERENCING NEW AS NEW OLD AS OLD'를 반환합니다.

    STATUS

    TEXT

    트리거의 현재 활성화 여부입니다.

    • ENABLE/DISABLE

    DESCRIPTION

    TEXT

    트리거에 대한 설명입니다.

    TRIGGER_BODY

    TEXT

    트리거가 호출하는 함수의 정의 또는 본문입니다.

    TYPE_NAME

    NAME

    타입 이름입니다.

    TYPE_OID

    OID

    타입 OID입니다.

    TYPECODE

    TEXT

    타입 CODE입니다.

    • OBJECT : 사용자 정의 객체 타입

    • COLLECTION : 배열 타입

      • 현재는 지원하지 않는 타입입니다.

    ATTRIBUTES

    SMALLINT

    타입의 속성 수입니다.

    EXPIRY_DATE

    TIMESTAMPTZ

    계정의 만기일입니다.

    DEFAULT_TABLESPACE

    TEXT

    데이터를 위한 기본 테이블스페이스입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    TEMPORARY_TABLESPACE

    TEXT

    임시 테이블을 위한 기본 테이블스페이스의 이름 또는 테이블스페이스 그룹의 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    CREATED

    TIMESTAMPTZ

    계정이 생성된 날짜입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INITIAL_RSRC_CONSUMER_GROUP

    TEXT

    사용자의 초기 리소스 소비자 그룹입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    EXTERNAL_NAME

    TEXT

    유저의 외부 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    SCHEMA_NAME

    NAME

    뷰가 속한 스키마의 이름입니다.

    TEXT

    CHARACTER VARYING

    뷰를 생성하는 데 사용된 SELECT 문입니다.

    PARENT

    TEXT

    상위 메모리 컨텍스트 이름입니다.

    LEVEL

    INTEGER

    메모리 컨텍스트의 계층 수준입니다.

    TOTAL_BYTES

    BIGINT

    컨텍스트가 할당한 총 메모리 크기입니다.

    TOTAL_NBLOCKS

    BIGINT

    할당된 블록 수입니다.

    FREE_BYTES

    BIGINT

    현재 할당된 메모리 중 사용 가능한 공간입니다.

    FREE_CHUNCKS

    BIGINT

    사용 가능한 메모리 조각 수입니다.

    USED_BYTES

    BIGINT

    실제로 사용 중인 메모리 크기입니다.

    STATUS

    TEXT

    아키텍처와 빌드 모드입니다.

    OWNER

    NAME

    테이블 소유자의 이름입니다.

    TABLE_SCHEMA

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    PRIVILEGE

    CHARACTER VARYING

    컬럼에 부여된 권한입니다.

    GRANTABLE

    CHARACTER VARYING

    해당 권한을 다른 유저에게 부여가능한지의 여부입니다. (YES/NO)

    COMMON

    CHARACTER VARYING

    권한의 부여 방식입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    INHERITED

    CHARACTER VARYING

    다른 컨테이너에서 상속 받았는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    CONSTRAINT_NAME

    TEXT

    Constraint의 이름입니다.

    TABLE_NAME

    TEXT

    Constraint가 속한 테이블의 이름입니다.

    COLUMN_NAME

    TEXT

    Constraint가 참조하는 컬럼의 이름입니다.

    POSITION

    SMALLINT

    테이블의 정의에서 컬럼의 위치입니다.

    CONSTRAINT_REF

    TEXT

    Constraint의 정의입니다.

    CONSTRAINT_TYPE

    TEXT

    Constraint의 타입입니다.

    • 'P' : Primary key

    • 'R' : Foreign key

    • 'U' : Unique

    TABLE_NAME

    TEXT

    Constraint가 속한 테이블의 이름입니다.

    SEARCH_CONDITION

    TEXT

    CHECK Constraint에 적용되는 조회 조건입니다.

    R_OWNER

    TEXT

    참조 제약 조건에 의해 참조되는 테이블의 소유자입니다.

    R_CONSTRAINT_NAME

    TEXT

    참조되는 테이블에 대한 제약 조건 정의의 이름입니다.

    DELETE_RULE

    TEXT

    참조 제약조건에 대한 삭제 규칙입니다.

    DEFERRABLE

    BOOLEAN

    제약 조건의 검사 시점이 미룰 수 있는지에 대한 여부입니다.(T/F)

    DEFERRED

    BOOLEAN

    제약 조건의 검사 시점이 미뤄졌는지에 대한 여부입니다. (T/F)

    INDEX_OWNER

    TEXT

    인덱스 소유자의 이름입니다.

    INDEX_NAME

    TEXT

    인덱스의 이름입니다.

    CONSTRAINT_DEF

    TEXT

    Constraint의 정의입니다.

    INDEX_TYPE

    TEXT

    인덱스의 타입입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'BTREE'을 반환합니다.

    TABLE_OWNER

    TEXT

    인덱스가 걸린 테이블의 소유자입니다.

    TABLE_NAME

    TEXT

    인덱스가 걸린 테이블의 이름입니다.

    TABLE_TYPE

    TEXT

    테이블의 타입입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'TABLE'을 반환합니다.

    UNIQUENESS

    TEXT

    인덱스가 유니크한지에 대한 여부입니다.(UNIQUE/NONUNIQUE)

    COMPRESSION

    TEXT

    인덱스의 압축 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'n'을 반환합니다.

    TABLESPACE_NAME

    TEXT

    테이블이 기본 테이블스페이스에 있지 않은 경우, 해당 테이블이 위치하는 테이블스페이스의 이름입니다.

    DEGREE

    INTEGER

    인덱스를 스캔하기 위한 인스턴스 당 스레드의 수입니다.

    LOGGING

    TEXT

    인덱스 변경 사항이 기록되는지 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'LOGGING'을 반환합니다.

    STATUS

    TEXT

    파티셔닝되지 않은 인덱스의 사용 가능 여부입니다.

    PARTITIONED

    TEXT

    파티셔닝 되었는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TEMPORARY

    TEXT

    인덱스가 임시 테이블에 존재하는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'n'을 반환합니다.

    SECONDARY

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    JOIN_INDEX

    TEXT

    인덱스가 조인 인덱스인지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼이다.

    • 항상 'NO'를 반환합니다.

    DROPPED

    TEXT

    인덱스가 삭제되었는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TABLE_OWNER

    NAME

    테이블 소유자의 이름입니다.

    COLUMN_POSITION

    SMALLINT

    인덱스에서 컬럼의 위치입니다.

    COLUMN_LENGTH

    SMALLINT

    컬럼의 길이입니다. (단위 : byte)

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    CHAR_LENGTH

    INTEGER

    컬럼이 가질 수 있는 최대 길이입니다.

    INDEX_NAME

    NAME

    인덱스의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    DESCEND

    TEXT

    컬럼이 내림차순으로 정렬되어 있는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    CREATED

    TIMESTAMP

    오브젝트의 생성 일시입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LAST_DDL_TIME

    TIMESTAMP

    객체에 대한 마지막 변경 사항(권한 부여 및 취소 포함)이 DDL 문에 의해 발생한 시간입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    SCHEMA_NAME

    NAME

    오브젝트가 속한 스키마의 이름입니다.

    STATUS

    TEXT

    객체가 유효한 상태인지의 여부입니다.

    TEMPORARY

    TEXT

    임시 객체인지에 대한 여부입니다.

    PARTITIONING_TYPE

    TEXT

    파티셔닝 방식입니다.

    • RANGE, LIST, HASH

    SUBPARTITIONING_TYPE

    TEXT

    복합 파티셔닝 방식입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않다.

    • 항상 'NONE'을 반환합니다.

    PARTITION_COUNT

    BIGINT

    파티션의 개수입니다.

    DEF_SUBPARTITION_COUNT

    INTEGER

    기본 서브 파티션의 개수입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않다.

    • 항상 0을 반환합니다.

    PARTITIONING_KEY_COUNT

    INTEGER

    PARTITION BY 구문에 명시된 컬럼의 개수입니다.

    SUBPARTITIONING_KEY_COUNT

    INTEGER

    SUBPARTITION BY 구문에 명시된 컬럼의 개수입니다.

    • 현재 SUBPARTITION 기능은 지원하고 있지 않다.

    • 항상 0을 반환합니다.

    STATUS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'VALID'를 반환합니다.

    DEF_TABLESPACE_NAME

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_PCT_FREE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_PCT_USED

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_INI_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_MAX_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_INITIAL_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_NEXT_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.항상 NULL을 반환합니다.

    DEF_MIN_EXTENTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_MAX_EXTENTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_FREELISTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_FREELIST_GROUPS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    DEF_LOGGING

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    DEF_COMPRESSION

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NONE'을 반환합니다.

    DEF_BUFFER_POOL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'DEFAULT'를 반환합니다.

    REF_PTN_CONSTRAINT_NAME

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INTERVAL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    ADMIN_OPTION

    TEXT

    관리 권한을 위임할 수 있는 옵션(admin option)과 함께 부여되었다면 'YES', 그렇지 않다면 'NO'를 표시합니다.

    DEFAULT_ROLE

    TEXT

    권한이 권한 피부여자가 세션을 생성할 때 활성화되는지에 대한 여부입니다.

    OS_OPTIONS

    TEXT

    OS에 의해 부여된 권한의 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TYPE

    TEXT

    프로그램의 타입입니다.

    • PROCEDURE, FUNCTION, TRIGGER

    LINE

    INTEGER

    해당 프로그램 기준으로 계산된 소스 코드 줄 번호입니다.

    TEXT

    TEXT

    소스 코드입니다.

    TABLESPACE_NAME

    NAME

    테이블이 포함된 테이블스페이스의 이름입니다.

    STATUS

    TEXT

    테이블의 사용 가능 여부입니다.

    TEMPORARY

    TEXT

    임시 테이블 여부입니다.

    COLUMN_NAME

    NAME

    컬럼의 이름입니다.

    DATA_TYPE

    NAME

    컬럼의 데이터 타입입니다.

    DATA_LENGTH

    INTEGER

    TEXT 컬럼의 길이입니다.

    DATA_PRECISION

    INTEGER

    NUMBER 컬럼의 정밀도입니다.

    DATA_SCALE

    INTEGER

    NUMBER 컬럼의 배율입니다.

    NULLABLE

    TEXT

    컬럼의 NULL 가능 여부입니다.

    • 컬럼이 NULL이 될 수 있으면 : 'Y'

    • 컬럼에 NULL이 허용되지 않으면 : 'N'

    COLUMN_ID

    SMALLINT

    테이블이나 뷰에서 컬럼의 상대적인 위치입니다.

    DATA_DEFAULT

    TEXT

    컬럼에 할당된 기본 값입니다.

    COMPOSITE

    TEXT

    테이블이 복합 파티셔닝 되었는지에 대한 여부입니다.

    PARTITION_NAME

    NAME

    파티션의 이름입니다.

    SUBPARTITION_COUNT

    BIGINT

    서브파티션의 개수입니다.

    HIGH_VALUE

    TEXT

    파티션 경계값 표현식입니다.

    HIGH_VALUE_LENGTH

    INTEGER

    파티션 경계값 표현식의 길이입니다.

    PARTITION_POSITION

    INTEGER

    이 파티션이 몇 번째 파티션인지 나타내는 순서입니다.

    TABLESPACE_NAME

    NAME

    파티션이 속한 테이블스페이스의 이름입니다.

    PCT_FREE

    INTEGER

    블록 내 최소 여유 공간 비율입니다.

    PCT_USED

    TEXT

    블록 내 최소 사용 공간 비율입니다.

    INI_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MAX_TRANS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INITIAL_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    NEXT_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MIN_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    MAX_EXTENT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    PCT_INCREASE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    FREELISTS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    FREELIST_GROUPS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LOGGING

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'YES'를 반환합니다.

    COMPRESSION

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NONE'을 반환합니다.

    NUM_ROWS

    DOUBLE PRECISION

    파티션 내 행의 대략적인 개수입니다.

    BLOCKS

    DOUBLE PRECISION

    파티션 내 블럭의 대략적인 개수입니다.

    EMPTY_BLOCKS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    AVG_SPACE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    CHAIN_CNT

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    AVG_ROW_LEN

    DOUBLE PRECISION

    파티션 내 행의 평균 길이(Byte)입니다.

    SAMPLE_SIZE

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    LAST_ANALYZED

    TIMESTAMPTZ

    파티션이 가장 최근에 분석된 날짜입니다.

    BUFFER_POOL

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'DEFAULT'를 반환합니다.

    GLOBAL_STATS

    TEXT

    통계 수집 여부입니다.

    USER_STATS

    TEXT

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    OWNER

    NAME

    테이블을 소유한 사람의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    PRIVILEGE

    CHARACTER VARYING

    권한의 이름입니다.

    GRANTABLE

    CHARACTER VARYING

    해당 권한을 다른 유저에게 부여가능한지의 여부입니다. (YES/NO)

    COMMON

    CHARACTER VARYING

    권한의 부여 방식입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    HIERARCHY

    CHARACTER VARYING

    HIERARCHY 옵션과 함께 권한이 부여되었는지에 대한 여부입니다.

    TYPE

    TEXT

    오브젝트의 타입입니다.

    INHERITED

    CHARACTER VARYING

    다른 컨테이너에서 상속 받았는지에 대한 여부입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'NO'를 반환합니다.

    TRIGGER_TYPE

    TEXT

    트리거가 언제 실행되며, 어떤 단위로 동작하는지 표시입니다.

    • 트리거 실행 시점 : BEFORE / INSTEAD OF / AFTER

    • 트리거 실행 단위 : ROW / STATEMENT

    TRIGGERING_EVENT

    TEXT

    트리거가 반응하는 DML 이벤트입니다.

    • INSERT

    • DELETE

    • UPDATE

    TABLE_OWNER

    NAME

    트리거가 설정된 테이블의 소유자 이름입니다.

    BASE_OBJECT_TYPE

    TEXT

    트리거가 걸려 있는 객체의 종류입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'TABLE''을 반환합니다.

    TABLE_NAME

    NAME

    트리거가 설정된 테이블의 이름입니다.

    REFERENCING_NAME

    TEXT

    트리거가 OLD 및 NEW 열 값을 읽기 위해 참조하는 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 'REFERENCING NEW AS NEW OLD AS OLD'를 반환합니다.

    STATUS

    TEXT

    트리거의 현재 활성화 여부입니다.

    • ENABLE/DISABLE

    DESCRIPTION

    TEXT

    트리거에 대한 설명입니다.

    TRIGGER_BODY

    TEXT

    트리거가 호출하는 함수의 정의 또는 본문입니다.

    TYPE_OID

    OID

    타입 OID입니다.

    TYPECODE

    TEXT

    타입 CODE입니다.

    • OBJECT : 사용자 정의 객체 타입

    • COLLECTION : 배열 타입

      • 현재는 지원하지 않는 타입이다.

    ATTRIBUTES

    SMALLINT

    타입 내 속성 개수입니다.

    EXPIRY_DATE

    TIMESTAMPTZ

    계정의 만기일입니다.

    DEFAULT_TABLESPACE

    TEXT

    데이터를 위한 기본 테이블스페이스입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    TEMPORARY_TABLESPACE

    TEXT

    임시 테이블을 위한 기본 테이블스페이스의 이름 또는 테이블스페이스 그룹의 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    CREATED

    TIMESTAMPTZ

    계정이 생성된 날짜입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    INITIAL_RSRC_CONSUMER_GROUP

    TEXT

    사용자의 초기 리소스 소비자 그룹입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    EXTERNAL_NAME

    TEXT

    유저의 외부 이름입니다.

    • 호환성을 위해 존재하는 컬럼입니다.

    • 항상 NULL을 반환합니다.

    SCHEMA_NAME

    NAME

    뷰가 속한 스키마의 이름입니다.

    TEXT

    CHARACTER VARYING

    뷰를 생성하는 데 사용된 SELECT 문입니다.

    GRANTOR

    NAME

    권한 부여자의 이름입니다.

    GRANTEE

    NAME

    권한 피부여자의 이름입니다.

    OWNER

    TEXT

    Constraint 소유자의 이름입니다.

    SCHEMA_NAME

    TEXT

    Constraint가 속한 스키마의 이름입니다.

    OWNER

    TEXT

    Constraint 소유자의 이름입니다.

    SCHEMA_NAME

    TEXT

    Constraint가 속한 스키마의 이름입니다.

    OWNER

    TEXT

    인덱스 소유자의 이름입니다.

    SCHEMA_NAME

    TEXT

    인덱스가 속한 스키마의 이름입니다.

    INDEX_OWNER

    NAME

    인덱스 소유자의 이름입니다.

    SCHEMA_NAME

    NAME

    인덱스가 속한 스키마의 이름입니다.

    OBJECT_NAME

    NAME

    오브젝트의 이름입니다.

    OBJECT_TYPE

    TEXT

    오브젝트의 타입입니다.

    • INDEX

    • SEQUENCE

    • VIEW

    • PARTITIONED TABLE

    • PARTITIONED INDEX

    • FOREIGN TABLE

    • TRIGGER

    • FUNCTION

    OWNER

    NAME

    테이블의 소유자 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    OWNER

    NAME

    프로그램 소유자의 이름입니다.

    SCHEMA_NAME

    NAME

    프로그램이 속한 스키마의 이름입니다.

    OWNER

    NAME

    테이블의 소유자입니다.

    SCHEMA_NAME

    NAME

    스키마 이름입니다.

    OWNER

    NAME

    테이블 소유자의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_OWNER

    NAME

    테이블 소유자의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    GRANTOR

    NAME

    권한 부여자의 이름입니다.

    GRANTEE

    NAME

    권한 피부여자의 이름입니다.

    OWNER

    NAME

    트리거의 소유자입니다.

    SCHEMA_NAME

    NAME

    트리거가 속한 스키마 이름입니다.

    OWNER

    NAME

    타입 소유자입니다.

    SCHEMA_NAME

    NAME

    타입이 속한 스키마 이름입니다.

    USERNAME

    NAME

    사용자의 이름입니다.

    USER_ID

    OID

    사용자에게 부여된 Numeric 형태의 ID입니다.

    VIEW_NAME

    NAME

    뷰의 이름입니다.

    OWNER

    NAME

    뷰 소유자의 이름입니다.

    OWNER

    TEXT

    Constraint 소유자의 이름입니다.

    SCHEMA_NAME

    TEXT

    Constraint가 속한 스키마의 이름입니다.

    GRANTOR

    NAME

    권한 부여자의 이름입니다.

    GRANTEE

    NAME

    권한 피부여자의 이름입니다.

    OWNER

    TEXT

    Constraint 소유자의 이름입니다.

    SCHEMA_NAME

    TEXT

    Constraint가 속한 스키마의 이름입니다.

    OWNER

    TEXT

    인덱스 소유자의 이름입니다.

    SCHEMA_NAME

    TEXT

    인덱스가 속한 스키마의 이름입니다..

    INDEX_OWNER

    NAME

    인덱스 소유자의 이름입니다.

    SCHEMA_NAME

    NAME

    인덱스가 속한 스키마의 이름입니다.

    OBJECT_NAME

    NAME

    오브젝트의 이름입니다.

    OBJECT_TYPE

    TEXT

    오브젝트의 타입입니다.

    • INDEX

    • SEQUENCE

    • VIEW

    • PARTITIONED TABLE

    • PARTITIONED INDEX

    • FOREIGN TABLE

    • TRIGGER

    • FUNCTION

    OWNER

    NAME

    테이블의 소유자 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    OBJECT_NAME

    TEST

    오브젝트 이름입니다.

    ROLE

    NAME

    ROLE의 이름입니다.

    ROLE_ID

    OID

    ROLED의 ID입니다.

    GRANTEE

    NAME

    권한 피부여자입니다.

    GRANTED_ROLE

    NAME

    부여된 권한 이름입니다.

    OWNER

    TEXT

    프로그램 소유자의 이름입니다.

    SCHEMA_NAME

    TEXT

    프로그램이 속한 스키마의 이름입니다.

    OWNER

    NAME

    테이블 소유자의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_OWNER

    NAME

    테이블 소유자의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    GRANTOR

    NAME

    권한 부여자의 이름입니다.

    GRANTEE

    NAME

    권한 피부여자의 이름입니다.

    OWNER

    NAME

    테이블의 소유자입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마 이름입니다.

    OWNER

    NAME

    트리거의 소유자입니다.

    SCHEMA_NAME

    NAME

    트리거가 속한 스키마 이름입니다.

    OWNER

    NAME

    타입 소유자입니다.

    SCHEMA_NAME

    NAME

    타입이 속한 스키마 이름입니다.

    USERNAME

    NAME

    사용자의 이름입니다.

    USER_ID

    OID

    사용자에게 부여된 Numeric 형태의 ID입니다.

    VIEW_NAME

    NAME

    뷰의 이름입니다.

    OWNER

    NAME

    뷰 소유자의 이름입니다.

    DUMMY

    TEXT

    'X'입니다.

    VERSION_INFO

    TEXT

    각 O2 extension과 O2의 버전 정보와 업데이트 시점입니다.

    NAME

    TEXT

    메모리 컨텍스트 이름입니다.

    IDENT

    TEXT

    해당 컨텍스트에 대한 추가 식별자 정보입니다.

    KEY

    TEXT

    Shared memory segment의 식별자입니다.

    USAGE

    INTEGER

    사용량입니다.

    PRODUCT

    TEXT

    구성 요소 이름입니다.

    VERSION

    TEXT

    버전입니다.

    GRANTOR

    NAME

    권한 부여자의 이름입니다.

    GRANTEE

    NAME

    권한 피부여자의 이름입니다.

    OWNER

    TEXT

    Constraint 소유자의 이름입니다.

    SCHEMA_NAME

    TEXT

    Constraint가 속한 스키마의 이름입니다.

    SCHEMA_NAME

    TEXT

    Constraint가 속한 스키마의 이름입니다.

    CONSTRAINT_NAME

    TEXT

    Constraint의 이름입니다.

    SCHEMA_NAME

    TEXT

    인덱스가 속한 스키마의 이름입니다.

    INDEX_NAME

    TEXT

    인덱스의 이름입니다.

    INDEX_OWNER

    NAME

    인덱스 소유자의 이름입니다.

    SCHEMA_NAME

    NAME

    인덱스가 속한 스키마의 이름입니다.

    OBJECT_NAME

    NAME

    오브젝트의 이름입니다.

    OBJECT_TYPE

    TEXT

    오브젝트의 타입입니다.

    • INDEX

    • SEQUENCE

    • VIEW

    • PARTITIONED TABLE

    • PARTITIONED INDEX

    • FOREIGN TABLE

    • TRIGGER

    • FUNCTION

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    USERNAME

    NAME

    권한이 부여된 사용자의 이름입니다.

    GRANTED_ROLE

    NAME

    권한 피부여자에게 부여된 권한의 이름입니다.

    SCHEMA_NAME

    TEXT

    프로그램이 속한 스키마의 이름입니다.

    NAME

    TEXT

    프로그램의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마 이름입니다.

    TABLE_NAME

    NAME

    테이블 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    SCHEMA_NAME

    NAME

    테이블이 속한 스키마의 이름입니다.

    TABLE_NAME

    NAME

    테이블의 이름입니다.

    GRANTOR

    NAME

    권한 부여자의 이름입니다.

    GRANTEE

    NAME

    권한 피부여자의 이름입니다.

    SCHEMA_NAME

    NAME

    트리거가 속한 스키마 이름입니다.

    TRIGGER_NAME

    NAME

    트리거 이름입니다.

    SCHEMA_NAME

    NAME

    타입이 속한 스키마 이름입니다.

    TYPE_NAME

    NAME

    타입 이름입니다.

    USERNAME

    NAME

    사용자의 이름입니다.

    USER_ID

    OID

    사용자에게 부여된 Numeric 형태의 ID입니다.

    VIEW_NAME

    NAME

    뷰의 이름입니다.

    OWNER

    NAME

    뷰 소유자의 이름입니다.

    ALL_CONS_COLUMNS

    ALL_CONSTRAINTS

    ALL_INDEXES

    ALL_IND_COLUMNS

    ALL_OBJECTS

    ALL_PART_TABLES

    ALL_SOURCE

    ALL_TABLES

    ALL_TAB_COLUMNS

    ALL_TAB_PARTITIONS

    ALL_TAB_PRIVS

    ALL_TRIGGERS

    ALL_TYPES

    ALL_USERS

    ALL_VIEWS

    DBA_CONS_COLUMNS

    DBA_COL_PRIVS

    DBA_CONSTRAINTS

    DBA_INDEXES

    DBA_IND_COLUMNS

    DBA_OBJECTS

    DBA_PART_TABLES

    DBA_PROCEDURES

    DBA_ROLES

    DBA_ROLE_PRIVS

    DBA_SOURCE

    DBA_TAB_COLUMNS

    DBA_TAB_PARTITIONS

    DBA_TAB_PRIVS

    DBA_TABLES

    DBA_TRIGGERS

    DBA_TYPES

    DBA_USERS

    DBA_VIEWS

    DUAL

    O2_EXTENSION_VERSION_INFO

    O2_MEMORY_CONTEXT_INFO

    O2_SHARED_MEMORY_INFO

    PRODUCT_COMPONENT_VERSION

    USER_COL_PRIVS

    USER_CONS_COLUMNS

    USER_CONSTRAINTS

    USER_INDEXES

    USER_IND_COLUMNS

    USER_OBJECTS

    USER_PART_TABLES

    USER_ROLE_PRIVS

    USER_SOURCE

    USER_TABLES

    USER_TAB_COLUMNS

    USER_TAB_PARTITIONS

    USER_TAB_PRIVS

    USER_TRIGGERS

    USER_TYPES

    USER_USERS

    USER_VIEWS

    'C' : Check
    TRUNCATE

    OTHER : 기타 타입

    'C' : Check
    TRUNCATE

    OTHER : 기타 타입

    'C' : Check
    TRUNCATE

    OTHER : 기타 타입