OS 환경 : Oracle Linux 8.4 (64bit)
DB 환경 : Oracle Database 23.4.0.24.05 ai Free
방법 : 오라클 23ai 뉴피처 IF [NOT] EXISTS 구문
오라클 23ai 부터 ddl 구문 실행 시 IF EXISTS 또는 IF NOT EXISTS 구문을 사용할 수 있음
이 기능을 사용하면 DDL시 특정 오브젝트가 존재하거나 존재하지 않는 경우에 에러를 발생시킬지 말지 제어할 수 있음
*19c(19.28 ru)부터 이 기능이 백포트됨(2025.07)
IF [NOT] EXISTS 구문이 지원되는 오브젝트 유형
https://docs.oracle.com/en/database/oracle/oracle-database/23/adfns/sql-processing-for-application-developers.html#GUID-2B16C03D-D4D5-438B-8CFE-DFE97593C240
| CREATE, DROP 구문 | ALTER 구문 |
| ANALYTIC VIEW | ANALYTIC VIEW |
| ASSEMBLY | |
| ATTRIBUTE DIMENSION | ATTRIBUTE DIMENSION |
| CLUSTER | CLUSTER |
| DATABASE LINK | DATABASE LINK |
| DIRECTORY | |
| DOMAIN | DOMAIN |
| EDITION | |
| FUNCTION | FUNCTION |
| HIERARCHY | HIERARCHY |
| INDEX | |
| INDEXTYPE | INDEXTYPE |
| INMEMORY JOIN GROUP | INMEMORY JOIN GROUP |
| JAVA | JAVA |
| LIBRARY | LIBRARY |
| MATERIALIZED VIEW | MATERIALIZED VIEW |
| MATERIALIZED VIEW LOG | MATERIALIZED VIEW LOG |
| MATERIALIZED ZONEMAP | MATERIALIZED ZONEMAP |
| MLE ENV | MLE ENV |
| MLE MODULE | MLE MODULE |
| OPERATOR | OPERATOR |
| PACKAGE | PACKAGE |
| PACKAGE BODY | |
| PROCEDURE | PROCEDURE |
| PROPERTY GRAPH | PROPERTY GRAPH |
| SEQUENCE | SEQUENCE |
| SYNONYM | SYNONYM |
| TABLE | TABLE |
| TABLESPACE | TABLESPACE |
| TRIGGER | TRIGGER |
| TYPE | TYPE |
| TYPE BODY | |
| USER | USER |
| VIEW | VIEW |
IF [NOT] EXISTS 구문이 지원되지 않는 경우
- 데이터 move시
- 파티션 add, drop, coalesce 시
- mview revalidate 시(compile, merge partition 등)
- private temporary 테이블 create, alter, drop 시
테스트
1. 테이블 create 시 IF NOT EXISTS 사용
2. 테이블 alert 시 IF EXISTS 사용
3. 테이블 drop 시 IF EXISTS 사용
테스트
1. 테이블 create 시 IF NOT EXISTS 사용
create 구문 실행시 테이블이 존재하지 않으면 테이블을 만들고 이미 존재해도 에러가 발생하지 않음
테이블 미 존재시
|
1
2
3
4
5
6
7
8
9
|
SQL> select * from t1;
*
ERROR at line 1:
ORA-00942: table or view does not exist
Help: https://docs.oracle.com/error-help/db/ora-00942/
SQL> create table IF NOT EXISTS t1 (col1 varchar2(10));
Table created.
|
기존에 테이블이 존재하지 않았기 때문에 당연히 테이블이 정상적으로 생성됨
테이블 존재시
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
create table t1 (col1 varchar2(10));
insert into t1 values ('A');
commit;
select * from t1;
COL1
----------
A
SQL> create table IF NOT EXISTS t1 (col1 varchar2(10));
Table created.
|
기존에 테이블이 존재하는 상태에서 create 구문을 실행해도 에러가 발생하지 않음
2. 테이블 alert 시 IF EXISTS 사용
alter 구문 실행시 테이블이 존재하면 테이블을 수정하고 테이블이 존재하지 않아도 에러가 발생하지 않음
테이블 미 존재시
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL> select * from t1;
*
ERROR at line 1:
ORA-00942: table or view does not exist
Help: https://docs.oracle.com/error-help/db/ora-00942/
SQL> drop table t1 purge;
Table dropped.
SQL> alter table IF EXISTS t1 modify col1 varchar2(12);
Table altered.
|
테이블이 존재하지 않는 상태에서 alter 구문을 실행해도 에러가 발생하지 않음
테이블 존재시
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
create table t1 (col1 varchar2(10));
insert into t1 values ('A');
commit;
select * from t1;
COL1
----------
A
SQL> alter table IF EXISTS t1 modify col1 varchar2(12);
Table altered.
|
기존에 테이블이 존재했기 때문에 당연히 테이블이 정상적으로 수정됨
3. 테이블 drop 시 IF EXISTS 사용
drop 구문 실행시 테이블이 존재하면 테이블을 삭제하고 테이블이 존재하지 않아도 에러가 발생하지 않음
테이블 미 존재시
|
1
2
3
4
5
6
7
8
9
|
SQL> select * from t1;
*
ERROR at line 1:
ORA-00942: table or view does not exist
Help: https://docs.oracle.com/error-help/db/ora-00942/
SQL> drop table IF EXISTS t1 purge;
Table dropped.
|
테이블이 존재하지 않는 상태에서 drop 구문을 실행해도 에러가 발생하지 않음
테이블 존재시
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
create table t1 (col1 varchar2(10));
insert into t1 values ('A');
commit;
select * from t1;
COL1
----------
A
SQL> drop table IF EXISTS t1 purge;
Table dropped.
|
기존에 테이블이 존재했기 때문에 당연히 테이블이 정상적으로 삭제됨
참조 :
https://docs.oracle.com/en/database/oracle/oracle-database/23/adfns/sql-processing-for-application-developers.html#GUID-3818B089-D99D-437C-862F-CBD276BDA3F1
https://oracle-base.com/articles/18c/private-temporary-tables-18c
'ORACLE > Admin' 카테고리의 다른 글
| 오라클 23ai 신기능 tns 에러 메세지 개선 (0) | 2024.05.08 |
|---|---|
| 오라클 23ai 신기능 group by 시 alias 및 position 사용 (0) | 2024.05.07 |
| 오라클 23ai 신기능 update, delete 시 direct join (0) | 2024.05.04 |
| 오라클 23ai 신기능 pdb 기동순서 조정 (2) | 2024.05.03 |
| 오라클 OCI 2024 Generative AI Professional 무료 강의 및 무료 자격증 (0) | 2024.05.02 |
