분석 함수 기능 개선
·
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 ..
SET 연산자 기능 개선
·
Oracle/SQL
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..
CHECKSUM 함수
·
Oracle/SQL
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..
MERGE 문의 개별 Insert, Update, Delete 로우 수
·
Oracle/SQL
*_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 ..
ORA_HASH 함수
·
Oracle/SQL
19c까지 ORA_HASH 함수는 CLOB 값에 대해 무작위 해시 값을 반환합니다. 아래는 SQL Language Reference의 ORA_HASH 함수에 대한 내용입니다. 원칙적으로 ORA_HASH 함수는 LOB 타입을 사용할 수 없습니다. The expr argument determines the data for which you want Oracle Database to compute a hash value. There are no restrictions on the length of data represented by expr, which commonly resolves to a column name. The expr cannot be a LONG or LOB type. It cannot be ..
CLOB 값을 바이트 단위로 자르기
·
Oracle/SQL
Oracle Database는 CLOB 값을 바이트 단위로 자르는 기능을 제공하지 않습니다. CLOB 값을 바이트 단위로 자르려면 조금 복잡한 표현식을 사용해야 합니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE T1 (c1 CLOB);INSERT INTO t1 VALUES ('가나다라마바사아자차카타파하');COMMIT; SUBSTRB 함수는 CLOB 타입을 지원하지 않습니다. SUBSTR 함수와 DBMS_LOB.SUBSTR 함수는 글자 단위로 CLOB 값을 자르며, SUBSTR 함수는 CLOB 타입, DBMS_LOB.SUBSTR 함수는 VARCHAR2 타입을 반환합니다.-- 2-1SELECT SUBSTRB (c1, 1, 10) A..
MERGE 문의 개별 Insert, Update 로우 수
·
Oracle/SQL
Oracle Database는 MERGE 문의 개별 Insert, Update 로우 수를 제공하지 않습니다. 패키지 변수로 MERGE 문의 개별 Insert, Update 로우 수를 계산할 수 있지만 성능 저하가 발생할 수 있습니다. 아래 세션 통계를 사용하면 성능 저하없이 MERGE 문의 개별 Insert, Update 로우 수를 계산할 수 있습니다. 참고로 MERGE 문의 Update과 Delete는 Row 단위, Insert는 Array 단위로 처리됩니다. 통계 내용 HSC Heap Segment Block Changes 힙 세그먼트의 블록을 변경하기 위해 액세스한 로우 수 (Array 처리는 1 증가) Heap Segment Array Inserts 힙 세그먼트에 대한 Array Insert 횟수..
에러 메시지 개선
·
Oracle/SQL
DOAG 2022에서 Gerald Venzl가 발표한 New and cool features for developers in Oracle database 프리젠테이션에 Oracle 23c부터 에러 메시지가 개선된다는 내용이 포함되어 있습니다. 참고로 이 내용은 New Features Guide에 포함되어 있지 않습니다. 테스트를 위해 아래와 같이 테이블을 생성하겠습니다.-- 1DROP TABLE t1 PURGE;CREATE TABLE t1 (c1 NUMBER, c2 NUMBER); 아래 쿼리로 ORA-00979 에러 메시지가 개선된 것을 볼 수 있습니다.-- 2-1: 23.2SELECT c1, c2 FROM t1GROUP BY c1;ORA-00979: "C2": GROUP BY 표현식과 일치하지..
Lock-Free Reservation #1
·
Oracle/SQL
Oracle 23c에 Lock-Free Reservation 기능이 추가되었습니다. 해당 기능은 로우 락 대신 Reservation Journal 테이블(이후 저널 테이블)을 통해 잔고, 재고, 예약 가능 좌석 수 등을 갱신하는 트랜잭션의 동시성을 향상시킵니다.Lock-Free Reservations enables concurrent transactions to proceed without being blocked on updates of heavily updated rows. Lock-Free reservations are held on the rows instead of locking them. Lock-Free Reservations verifies if the updates can succeed ..
Table Value Constructor
·
Oracle/SQL
개요Oracle 23c에 Table Value Constructor(이후 TVC) 기능이 추가되었습니다.The database's SQL engine now supports a VALUES clause for many types of statements. This new clause allows for materializing rows of data on the fly by specifying them using the new syntax without relying on existing tables. Oracle supports the VALUES clause for the SELECT, INSERT, and MERGE statements. The introduction of the new VALUES..
BOOLEAN 타입
·
Oracle/SQL
Oracle 23c부터 SQL 문에 BOOLEAN 타입을 사용할 수 있습니다.Oracle Database now supports the ISO SQL standard-compliant BOOLEAN data type. This enables you to store TRUE and FALSE values in tables and use BOOLEAN expressions in SQL statements. The BOOLEAN data type standardizes the storage of Yes and No values and makes it easier to migrate to Oracle Database. 테스트를 위해 아래와 같이 c2 칼럼이 BOOLEAN 타입인 테이블을 생성하겠습니다.-- 1-..
FROM 절 미사용 SELECT 문
·
Oracle/SQL
Oracle 23c부터 FROM 절을 사용하지 않은 SELECT 문을 사용할 수 있습니다.You can now run SELECT expression-only queries without a FROM clause. This new feature improves SQL code portability and ease of use for developers. 아래 SELECT 문은 FROM 절을 사용하지 않습니다.  23.2 버전은 결과가 반환되지만, 19.3 버전은 에러가 발생합니다. 1-1번 쿼리의 실행 계획에서 내부적으로 DUAL 테이블이 사용되는 것을 알 수 있습니다.-- 1-1: 23.2SELECT 1 AS c1;C1-- 11개의 행이 선택되었습니다.----------------------------..