프린트 하기

OS 환경 : Oracle Linux 8.4 (64bit)

 

DB 환경 : Oracle Database 23.4.0.24.05 ai Free

 

방법 : 오라클 23ai 뉴피처 from 절 없는 select 문

오라클 23ai 부터 dual 테이블을 조회하는 경우 from 절을 사용하지 않고 select 쿼리를 실행할 수 있음
이 기능을 사용하면 SQL 을 조금더 단순화 시키고 사용 편의성을 향상 시킴
dual을 사용하는 모든곳에 다 사용가능한 기능인듯 함

 

 

테스트
1. 일반 숫자 및 문자 조회
2. 사칙연산
3. 날짜 조회
4. 함수 사용
5. connect by 절 사용
6. 시퀀스 호출
7. 랜덤 숫자 생성
8. 사용자 세션 확인
9. 고유 식별자 생성
10. 쿼리변환 10053 트레이스 확인

 

 

테스트
1. 일반 숫자 및 문자 조회

1
2
3
4
5
6
7
8
9
10
11
SQL> select 1;
 
         1
----------
         1
 
SQL> select 'A' A;
 
A
-
A

from dual 없이 정상적으로 사용 가능함

 

 

2. 사칙연산

1
2
3
4
5
SQL> select 1+1;
 
       1+1
----------
         2

from dual 없이 정상적으로 사용 가능함

 

 

3. 날짜 조회

1
2
3
4
5
SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') dt;
 
DT
-------------------
2024/05/07 14:42:11

from dual 없이 정상적으로 사용 가능함

 

 

4. 함수 사용

1
2
3
4
5
SQL> select substr('ORACLE23AI', 1, 6);
 
SUBSTR
------
ORACLE

from dual 없이 정상적으로 사용 가능함

 

 

5. connect by 절 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> select level as lv connect by level <= 10;
 
        LV
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10
 
10 rows selected.

from dual 없이 정상적으로 사용 가능함

 

 

6. 시퀀스 호출
시퀀스 생성

1
2
3
4
5
6
7
8
9
10
11
SQL> 
create sequence emp_seq
       increment by 1
       start with 1
       minvalue 1
       maxvalue 9999
       nocycle
       nocache
       noorder;
 
Sequence created.

 

 

시퀀스 호출

1
2
3
4
5
SQL> select emp_seq.nextval;
 
   NEXTVAL
----------
         1

from dual 없이 정상적으로 사용 가능함

 

 

7. 랜덤 숫자 생성

1
2
3
4
5
SQL> select dbms_random.value;
 
     VALUE
----------
.750160313

from dual 없이 정상적으로 사용 가능함

 

 

8. 사용자 세션 확인

1
2
3
4
5
SQL> select user;
 
USER
--------------
C##IMSI

from dual 없이 정상적으로 사용 가능함

 

 

9. 고유 식별자 생성

1
2
3
4
5
SQL> select sys_guid();
 
SYS_GUID()
--------------------------------
17D895D67B9BE11CE0652789A8C06A39

from dual 없이 정상적으로 사용 가능함

 

 

10. 쿼리변환 10053 트레이스 확인
경로 확인

1
2
3
4
5
SQL> select value from v$diag_info where name = 'Default Trace File';
 
VALUE
--------------------------------------------------------------------------------
/opt/oracle/diag/rdbms/free/FREE/trace/FREE_ora_123635.trc

 

 

트레이스 및 쿼리 수행

1
2
3
4
SQL> 
alter session set events '10053 trace name context forever';
select 10+10; 
alter session set events '10053 trace name context off';

 

 

트레이스 확인

1
2
3
$ vi /opt/oracle/diag/rdbms/free/FREE/trace/FREE_ora_123635.trc
Final query after transformations: qb SEL$1 (#0):******* UNPARSED QUERY IS *******
SELECT 20 "10+10" FROM "SYS"."DUAL" "DUAL"

내부적으로 from dual을 추가함

 

 

결론 : from dual을 생략하는 이 기능은 기존에 from dual 을 사용하던 모든곳에서 다 사용가능한것으로 보임

 

 

참조 : 

https://apex.oracle.com/pls/apex/features/r/dbfeatures/features?feature_id=1713
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/SELECT.html#SQLRF-GUID-CFA006CA-6FF1-4972-821E-6996142A51C6
https://oracle-base.com/articles/23c/select-without-from-clause-23c