Oracle23ai 新特性IF [NOT] EXISTS語法支持的使用
IF [NOT] EXISTS 語法支持
CREATE、ALTER和DROP DDL語句支持IF NOT EXISTS和IF EXISTS子句。它們用于抑制因給定對象的存在或不存在而引發(fā)的潛在錯(cuò)誤,允許您編寫冪等DDL腳本。
CREATE DDL語句支持IF NOT EXISTS子句,以防止在具有給定名稱的對象已存在時(shí)拋出錯(cuò)誤。如果對象已經(jīng)存在,則忽略該命令,原始對象保持不變。
另一方面,IF EXISTS子句在與ALTER和DROP DDL語句一起使用時(shí)會抑制錯(cuò)誤。如果不存在給定名稱的對象,則忽略該命令,并且沒有對象受到ALTER或DROP的影響。
子句的使用或排除為您提供了更多的控制,具體取決于您是否需要在執(zhí)行DDL語句之前知道對象是否存在。有了這種靈活性,您可以確定是寧愿忽略該語句,還是在對象存在(或不存在)的情況下引發(fā)錯(cuò)誤。
注意:在使用CREATE DDL語句的命令中,IF NOT EXISTS不能與OR REPLACE結(jié)合使用。
Note:IF NOT EXISTS cannot be used in combination with OR REPLACE in commands using the CREATE DDL statement.
CREATE PROCEDURE with IF NOT EXISTS
假設(shè)您的架構(gòu)中不存在同名過程,則執(zhí)行一次此語句會創(chuàng)建過程hello。
Executing this statement one time results in the creation of procedure hello, assuming a procedure by the same name does not already exist in your schema.
TESTUSER@FREEPDB1> col BANNER format a100 TESTUSER@FREEPDB1> select BANNER from v$version; BANNER ---------------------------------------------------------------------------------------------------- Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free CREATE PROCEDURE IF NOT EXISTS hello AS BEGIN DBMS_OUTPUT.PUT_LINE('Hello there'); END; /
即使更改了存儲過程體,多次執(zhí)行語句也不會導(dǎo)致錯(cuò)誤。原來的身體保持不變。
Executing the statement additional times, even with an altered procedure body, results in no error. The original body remains unchanged.
TESTUSER@FREEPDB1> CREATE PROCEDURE IF NOT EXISTS hello AS 2 BEGIN 3 DBMS_OUTPUT.PUT_LINE('Second hello'); 4 END; 5 / Procedure created. TESTUSER@FREEPDB1> col text format a100 TESTUSER@FREEPDB1> SELECT TEXT FROM USER_SOURCE WHERE NAME='HELLO'; TEXT ---------------------------------------------------------------------------------------------------- PROCEDURE hello AS BEGIN DBMS_OUTPUT.PUT_LINE('Hello there'); END;
Orcle19c及之前版本都不支持該語法
發(fā)現(xiàn)創(chuàng)建時(shí)編譯不成功。去掉IF NOT EXISTS則成功創(chuàng)建,并執(zhí)行成功!
HR@orcl> CREATE PROCEDURE hello AS 2 BEGIN 3 DBMS_OUTPUT.PUT_LINE('Second hello'); 4 END; 5 / Procedure created. HR@orcl> col BANNER format a100 HR@orcl> select BANNER from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production HR@orcl> set serveroutput on HR@orcl> begin 2 hello(); 3 end; 4 / Second hello PL/SQL procedure successfully completed.
到此這篇關(guān)于Oracle23ai 新特性IF [NOT] EXISTS語法支持的使用的文章就介紹到這了,更多相關(guān)Oracle23ai IF [NOT] EXISTS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle SQL Developer顯示的時(shí)間包含時(shí)分秒的設(shè)置方法
Oracle SQL Developer是Oracle公司出品的一個(gè)免費(fèi)的集成開發(fā)環(huán)境,本篇文章給大家介紹Oracle SQL Developer顯示的時(shí)間包含時(shí)分秒的設(shè)置方法,需要的朋友參考下吧2015-09-09mybatis?調(diào)用?Oracle?存儲過程并接受返回值的示例代碼
這篇文章主要介紹了mybatis?調(diào)用?Oracle?存儲過程?并接受返回值,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08Oracle Listener 動態(tài)注冊 與 靜態(tài)注冊
注冊就是將數(shù)據(jù)庫作為一個(gè)服務(wù)注冊到監(jiān)聽程序??蛻舳瞬恍枰罃?shù)據(jù)庫名和實(shí)例名,只需要知道該數(shù)據(jù)庫對外提供的服務(wù)名就可以申請連接到數(shù)據(jù)庫2015-12-12Oracle/SQL中TO_DATE函數(shù)詳細(xì)實(shí)例解析
Oracle to_date()函數(shù)用于日期轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Oracle/SQL中TO_DATE函數(shù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用oracle具有一定的參考解決價(jià)值,需要的朋友可以參考下2024-06-06Oracle遞歸查詢樹形數(shù)據(jù)實(shí)例代碼
Oracle數(shù)據(jù)庫中常要處理一些父子關(guān)系的記錄,在OLTP中要用得多一些,oracle提供了遞歸查詢可以很容易的滿足這個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于Oracle遞歸查詢樹形數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-11-11Oracle創(chuàng)建和管理分區(qū)索引的操作方法
創(chuàng)建和管理分區(qū)索引(Partitioned Index)是數(shù)據(jù)庫管理中的重要任務(wù),特別是在處理大規(guī)模數(shù)據(jù)集時(shí),以下是如何在Oracle數(shù)據(jù)庫中創(chuàng)建和管理分區(qū)索引的詳細(xì)步驟和示例代碼,感興趣的朋友一起看看吧2024-08-08