21c

Oracle/Administration

ALTER TABLE MOVE 개선

오라클 21c의 VLDB and Partitioning Guide에 아래의 설명이 추가되었습니다. As of Oracle Database 21c, you can move partitioned and subpartitioned tables with a single DDL command. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER) PARTITION BY RANGE (c1) SUBPARTITION BY HASH (c2) SUBPARTITION TEMPLATE ( SUBPARTITION sp1 , SUBPARTITION sp2 ) ( PARTITION p1 VALUES LESS THAN ..

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/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..

Oracle/PLSQL

Qualified Expression 기능 개선

개요 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 이 글은 ..

Oracle/PLSQL

FOR LOOP 문 기능 개선

개요 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..

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/Performance

Hash-based Distinct Aggregation

Oracle 21c에 Hash-based Distinct Aggregation 기능이 추가되었습니다. 이 기능은 COUNT (DISTINCT) 표현식을 2번 이상 사용한 쿼리에 대해 해시 방식의 집계를 사용으로써 성능을 개선합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다. -- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1, c2) AS SELECT CEIL (ROWNUM / 1000), CEIL (ROWNUM / 1000) FROM XMLTABLE ('1 to 10000000'); 아래는 19.3 버전에서 COUNT (DISTINCT) 표현식을 2번 사용한 쿼리의 실행 계획입니다. 수행에 4.85초가 소요되고, 실행 계획 2번에 SORT GROUP BY 오퍼레이..

정희락
'21c' 태그의 글 목록