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시 특정 오브젝트가 존재하거나 존재하지 않는 경우에 에러를 발생시킬지 말지 제어할 수 있음
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 |