CSV to JSON Array
·
Oracle/JSON
Oracle은 아쉽게도 CSV 형식의 문자 값을 JSON Array로 변환하는 기능을 제공하지 않습니다. 아래와 같이 CSV 형식의 문자 값을 JSON Array 형식으로 변환하는 사용자 정의 함수를 생성하겠습니다. -- 1 CREATE OR REPLACE FUNCTION fnc_csv_to_jarray ( i_val IN CLOB , i_del IN VARCHAR2 DEFAULT ',' , i_typ IN VARCHAR2 DEFAULT 'C' -- C, N ) RETURN CLOB -- RETURN JSON IS PRAGMA UDF; TYPE taa_varchar2 IS TABLE OF VARCHAR2(32747) INDEX BY PLS_INTEGER; v_buf VARCHAR2(32767); v_tm..
Parallel Conventional Load
·
Oracle/Performance
병렬 INSERT 문에 NOAPPEND 힌트를 사용하면 데이터를 Conventional Path로 적재할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하고, _optimizer_gather_stats_on_load 파라미터를 FALSE로 설정하겠습니다. -- 1-1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1 NUMBER); CREATE TABLE t2 (c1) AS SELECT ROWNUM FROM XMLTABLE ('1 to 1000000'); -- 1-2 ALTER SESSION SET "_optimizer_gather_stats_on_load" = FALSE; 아래는 병렬 DML이 활성화되지 않은 병렬 INSERT 문의 실..
Parallel 힌트와 JPPD 쿼리 변환
·
Oracle/Performance
Oracle 12c의 버그 Fix으로 인해 구문 수준의 PARALLEL 힌트를 사용한 병렬 쿼리의 경우 JPPD에 대한 실행 계획이 변경될 수 있습니다. 테스트를 위해 아래와 같이 테이블과 인덱스를 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1, c2) AS SELECT ROWNUM, LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 100'); CREATE TABLE t2 (c1, c2) AS SELECT CEIL (ROWNUM / 100), LPAD ('X', 100, 'X') FROM XMLTABLE ('1 to 10000'); CREATE INDEX t2_x1 ON t2 (c1); 아..
Asynchronous Global Index Maintenance
·
Oracle/Administration
개요 Oracle 12c에 Asynchronous Global Index Maintenance 기능이 추가되었습니다. 이 기능은 글로벌 인덱스의 관리 작업을 비동기로 수행함으로써 글로벌 인덱스를 가진 테이블에 대한 DROP PARTITION과 TRUNCATE PARTITION의 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1, c2) PARTITION BY RANGE (c1) ( PARTITION p1 VALUES LESS THAN (5000001) , PARTITION p2 VALUES LESS THAN (MAXVALUE) ) AS SELECT ROWNUM, 'X' FROM XMLTABLE ('1 ..
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/PLSQL
개요 Oracle 21c부터 Iterator Choice로 컬렉션에 값을 할당할 수 있습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(1)); INSERT INTO t1 VALUES (2, 'A'); INSERT INTO t1 VALUES (4, 'B'); INSERT INTO t1 VALUES (6, 'C'); COMMIT; Basic Iterator Choice Basic Iterator Choice는 컬렉션에 값을 할당할 수 없습니다. 아래 예제는 에러가 발생합니다. -- 2 DECLARE TYPE taa IS TABLE OF VARCHAR2(1) INDEX BY PLS..
Qualified Expression 기능 개선
·
Oracle/PLSQL
개요 Oracle 21c에서 Qualified Expression 기능이 대폭 개선되었습니다. PL/SQL Language Reference는 Qualified Expression를 아래와 같이 구분합니다. qualified_expression empty_qualified_expression simple_qualified_expression aggregate_qualified_expression positional_choice_list expr sequence_iterator_choice explicit_choice_list named_choice_list indexed_choice_list basic_iterator_choice index_iterator_choice others_choice 이 글은 ..
FOR LOOP 문 기능 개선
·
Oracle/PLSQL
개요 Oracle 21c에서 FOR LOOP 문의 기능이 대폭 개선되었습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 VARCHAR2(1)); INSERT INTO t1 VALUES (2, 'A'); INSERT INTO t1 VALUES (4, 'B'); INSERT INTO t1 VALUES (6, 'C'); COMMIT; Iterand FOR LOOP 문의 iterand에 MUTABLE 키워드와 constrained type을 사용할 수 있습니다. pls_identifier [ MUTABLE | IMMUTABLE ] [constrained_type] 아래 예제는 iterand에 MUTA..
비트 연산
·
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 ..
분석 함수 기능 개선
·
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 ..