ORA-01719 에러
·
Oracle/SQL
오라클 23.1 버전부터 IN 조인 조건에 대해 ORA-01719 에러가 발생하지 않습니다. 아래는 V$SYSTEM_FIX_CONTROL 뷰에서 ORA-01719 에러와 관련된 Fix Control을 조회한 결과입니다.SELECT bugno, value, sql_feature, description, optimizer_feature_enable FROM v$system_fix_control WHERE bugno IN (6610822, 32436948); BUGNO VALUE SQL_FEATURE DESCRIPTION OPTIMIZER_FEATURE_ENABLE-------- ----- -----------..
SQL Macro - Table Expression
·
Oracle/SQL
지난 글에 이어 이번 글에서는 테이블 표현식을 사용하는 테이블 SQM에 대해 간단히 살펴보겠습니다. 참고로 테이블 SQM은 Oracle 19c에 추가된 PTF(Polymorphic Table Function)과 유사하게 동작하며, SQL Server의 TVF(Table-Valued Function)을 대체할 수 있는 기능으로 보입니다. 테스트 버전은 아래와 같습니다. 테이블 SQM은 19.7 버전으로 기능이 backport되었습니다.-- 1SELECT version_full FROM product_component_version;VERSION_FULL------------21.3.0.0.01 row selected. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 2DROP TABLE t1 PUR..
SQL Macro - Scalar Expression
·
Oracle/SQL
Oracle 21c에 SQL Macro(SQM) 기능이 추가되었습니다. SQM을 사용하면 SQL 표현식(스칼라 표현식)과 SQL 문(테이블 표현식)을 재사용 가능한 매개변수화된 구조로 변환할 수 있습니다. 이번 글에서 스칼라 표현식을 사용하는 스칼라 SQM에 대해 간단히 살펴보겠습니다.You can create SQL macros (SQM) to factor out common SQL expressions and statements into reusable, parameterized constructs that can be used in other SQL statements.SQL macros can either be scalar expressions, typically used in SELECT lis..
분석 함수 기능 개선
·
Oracle/SQL
Oracle 21c에서 분석 함수의 기능이 개선되었습니다. 이번 글에서 관련 내용을 살펴보겠습니다. 준비테스트 버전은 아래와 같습니다.-- 1SELECT version_full FROM product_component_version;VERSION_FULL------------21.3.0.0.01 row selected. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 2DROP TABLE t1 PURGE;CREATE TABLE t1 (c1 NUMBER, c2 NUMBER);INSERT INTO t1 VALUES (1, 1);INSERT INTO t1 VALUES (2, 1);INSERT INTO t1 VALUES (3, 2);INSERT INTO t1 VALUES (4, 2);INSERT INTO..
Interval 값을 초로 변환
·
Oracle/SQL
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.123456789' AS ts..
현재 세션 SERIAL 번호 조회
·
Oracle/SQL
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..
SYS_ROW_ETAG 함수
·
Oracle/SQL
Oracle 23c에 SYS_ROW_ETAG 함수가 추가되었습니다. 이 함수는 칼럼 입력 순서와 무관하게 입력 값에 대한 고유한 32바이트 RAW 값을 반환합니다. 결과 값을 사용하면 데이터 변경 여부를 확인할 수 있습니다.SYS_ROW_ETAG (([[schema_name.]table_name.]column_name) [,([[schema_name.]table_name.]column_name)]...) 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(1), c3 VARCHAR2(1), c4 VARCHAR2(1));INSERT INTO t1 VALUES (1, 'A', 'A', 'B');I..
BITOR 함수와 BITXOR 함수
·
Oracle/SQL
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..
KURTOSIS_POP 함수와 KURTOSIS_SAMP 함수
·
Oracle/SQL
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의 분포가 비슷합니..
SKEWNESS_POP 함수와 SKEWNESS_SAMP 함수
·
Oracle/SQL
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..
Bitmap-based COUNT (DISTINCT) Functions
·
Oracle/SQL
개요 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 ..