Oracle/SQL

Oracle/SQL

Interval 값을 초로 변환

Oracle은 Interval 값을 초로 변환하는 함수를 제공하지 않아 아래와 같이 다소 복잡한 계산식을 사용해야 합니다.-- 1SELECT ts2 - ts1 AS int , EXTRACT (DAY FROM ts2 - ts1) * 60 * 60 * 24 + EXTRACT (HOUR FROM ts2 - ts1) * 60 * 60 + EXTRACT (MINUTE FROM ts2 - ts1) * 60 + EXTRACT (SECOND FROM ts2 - ts1) AS sec FROM (SELECT TIMESTAMP '2050-01-01 00:00:00.000000000' AS ts1 , TIMESTAMP '2050-02-01 00:00:00.12345..

Oracle/SQL

현재 세션 SERIAL 번호 조회

SYS_CONTEXT 함수는 현재 세션의 SERIAL 번호를 조회할 수 있는 파라미터를 제공하지 않습니다. 아래와 같이 DBMS_DEBUG_JDWP 패키지의 CURRENT_SESSION_SERIAL 함수를 사용하면 현재 세션의 SERIAL 번호를 조회할 수 있습니다.SELECT inst_id , sid , serial# , DBMS_DEBUG_JDWP.CURRENT_SESSION_ID AS current_session_id , DBMS_DEBUG_JDWP.CURRENT_SESSION_SERIAL AS current_session_serial FROM gv$session WHERE inst_id = SYS_CONTEXT ('USERENV', 'INSTANCE') AND s..

Oracle/SQL

SYS_ROW_ETAG 함수

Oracle 23c에 SYS_ROW_ETAG 함수가 추가되었습니다. 이 함수는 칼럼 입력 순서와 무관하게 입력 값에 대한 고유한 32바이트 RAW 값을 반환합니다. 결과 값을 사용하면 데이터 변경 여부를 확인할 수 있습니다. SYS_ROW_ETAG (([[schema_name.]table_name.]column_name) [,([[schema_name.]table_name.]column_name)]...) 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(1), c3 VARCHAR2(1), c4 VARCHAR2(1)); INSERT INTO t1 VALUES (1, 'A', 'A', '..

Oracle/SQL

BITOR 함수와 BITXOR 함수

Oracle 21c에 BITOR 함수와 BITXOR 함수가 추가되었습니다. 참고로 이 함수들은 문서화되지 않았습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER); INSERT INTO t1 VALUES (1, BIN_TO_NUM (0, 0, 1)); INSERT INTO t1 VALUES (2, BIN_TO_NUM (0, 1, 1)); INSERT INTO t1 VALUES (3, BIN_TO_NUM (1, 1, 1)); COMMIT; 아래는 BITOR 함수를 사용한 결과입니다. -- 2 SELECT c1, c2, BITOR (c2, 2) AS bo FROM t1; C1 C2 BO..

Oracle/SQL

KURTOSIS_POP 함수와 KURTOSIS_SAMP 함수

Oracle 21c에 KURTOSIS_POP 함수와 KURTOSIS_SAMP 함수가 추가되었습니다. 두 함수는 집계 함수로 집계 대상의 모양을 나타내는 kurtosis 값을 반환합니다. KURTOSIS_POP 함수는 population(모집단) kurtosis 값, KURTOSIS_SAMPLE 함수는 sample(표본) kurtosis 값을 반환한다는 차이점이 있습니다. KURTOSIS_POP ([ DISTINCT | ALL | UNIQUE ] expr) KURTOSIS_SAMP ([ DISTINCT | ALL | UNIQUE ] expr) 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. c3, c4, c10, c11 칼럼은 1, 2의 분포가 큰 반면, C5 ~ C7 칼럼은 1, 2의 분포가 비슷합니..

Oracle/SQL

SKEWNESS_POP 함수와 SKEWNESS_SAMP 함수

Oracle 21c에 SKEWNESS_POP 함수와 SKEWNESS_SAMP 함수가 추가되었습니다. 두 함수는 집계 함수로 집계 대상의 대칭성을 나타내는 skewness 값을 반환합니다. SKEWNESS_POP 함수는 population(모집단) skewness 값, SKEWNESS_SAMPLE 함수는 sample(표본) skewness 값을 반환한다는 차이점이 있습니다. SKEWNESS_POP ([ DISTINCT | ALL | UNIQUE ] expr) SKEWNESS_SAMP ([ DISTINCT | ALL | UNIQUE ] expr) 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. c3 ~ c6 칼럼은 분포가 좌측에 집중된 positive skew, c8 ~ c11 칼럼은 분포가 우측에 집중..

Oracle/SQL

비트 연산

개요 Oracle 21c에 비트 값을 집계 연산할 수 있는 BIT_AND_AGG, BIT_OR_AGG, BIT_XOR_AGG 함수가 추가되었습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 NUMBER); 기본 함수 비트 값과 관련하여 기본적으로 BIN_TO_NUM, BITAND 함수를 사용할 수 있습니다. BIN_TO_NUM 함수는 비트 벡터에 해당하는 숫자 값을 반환합니다. BITAND 함수는 두 숫자 값의 비트 AND 결과를 숫자 값으로 반환합니다. 아래와 같이 BIN_TO_NUM 함수를 사용하여 데이터를 삽입하겠습니다. -- 2 INSERT INTO t1 VALUES..

Oracle/SQL

Bitmap-based COUNT (DISTINCT) Functions

개요 Oracle 19c에 추가된 BITMAP_BUCKET_NUMBER, BITMAP_BIT_POSITION, BITMAP_CONSTRUCT_AGG, BITMAP_OR_AGG, BITMAP_COUNT 함수를 사용하면 숫자 값에 대해 비트맵 기반의 COUNT (DISTINCT) 집계를 수행할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 NUMBER); INSERT INTO t1 VALUES (1, 3, 1); INSERT INTO t1 VALUES (1, 3, 2); INSERT INTO t1 VALUES (1, 4, 2); INSERT INTO t1 VALUES ..

Oracle/SQL

분석 함수 기능 개선

개요 Oracle 21c에 GROUPS 키워드, EXCLUDE 옵션, 쿼리 블록 WINDOW 절 등의 분석 함수 기능이 추가되었습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER); INSERT INTO t1 VALUES (1, 1); INSERT INTO t1 VALUES (2, 2); INSERT INTO t1 VALUES (3, 2); INSERT INTO t1 VALUES (4, 3); INSERT INTO t1 VALUES (5, 3); INSERT INTO t1 VALUES (6, 4); COMMIT; GROUPS 키워드 ROWS, RANGE 키워드 외에도 GROUPS 키..

Oracle/SQL

SET 연산자 기능 개선

Oracle 21c부터 SET 연산자 뒤에 ALL 또는 DISTICT 키워드를 지정할 수 있습니다. ALL 키워드를 지정하면 중복을 제거하지 않고, DISTICT 키워드를 지정하면 중복을 제거합니다. 기본값은 DISTICT 키워드입니다. 참고로 EXCEPT 연산자는 MINUS 연산자와 동일하게 동작합니다. 결과적으로 INTERSECT ALL 연산자와 MINUS ALL 연산자가 추가되었습니다. UNION [ ALL | DISTINCT ] INTERSECT [ ALL | DISTINCT ] MINUS [ ALL | DISTINCT ] EXCEPT [ ALL | DISTINCT ] 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PUR..

Oracle/SQL

CHECKSUM 함수

Oracle 21c에 CHECKSUM 함수가 추가되었습니다. CHECKSUM 함수는 집계한 칼럼 값에 대한 체크섬을 반환하며, 로우 셋의 특정 칼럼에 대한 변경 여부를 확인하는 목적으로 사용할 수 있습니다. CHECKSUM ([ DISTINCT | ALL ] expr) [OVER (analytic_clause)] 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER, c3 VARCHAR2(1)); INSERT INTO t1 VALUES (1, 1, 'A'); INSERT INTO t1 VALUES (2, 1, 'B'); INSERT INTO t1 VALUES (3, 1, 'C'); INSERT..

Oracle/SQL

MERGE 문의 개별 Insert, Update, Delete 로우 수

*_TAB_MODIFICATIONS 뷰의 변경 정보로 MERGE 문의 개별 Insert, Update, Delete 로우 수를 계산할 수 있습니다. 다만 지난 글의 세션 통계와 달리 변경 정보는 시스템 수준에서 저장되므로 이 방법은 ETL처럼 단독으로 수행되는 MERGE 문에만 사용할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1, c2) AS SELECT ROWNUM, 1 FROM XMLTABLE ('1 to 200'); CREATE TABLE t2 (c1, c2) AS SELECT ROWNUM, CEIL (ROWNUM / 100) FROM XMLTABLE ('1 ..

정희락
'Oracle/SQL' 카테고리의 글 목록