Oracle23ai 新特性IF [NOT] EXISTS语法支持的使用

 更新时间:2024年08月05日 09:51:44   作者:zxrhhm  
IF [NOT] EXISTS语法用于抑制因给定对象的存在或不存在而引发的潜在错误,允许您编写幂等DDL脚本,本文主要介绍了Oracle23ai 新特性IF [NOT] EXISTS语法支持的使用,感兴趣的可以了解一下

官方文档地址
https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/release-changes.html#GUID-9EE96980-43F9-4068-893E-C191CD83ACA6

IF [NOT] EXISTS 语法支持

CREATE、ALTER和DROP DDL语句支持IF NOT EXISTS和IF EXISTS子句。它们用于抑制因给定对象的存在或不存在而引发的潜在错误,允许您编写幂等DDL脚本。

CREATE DDL语句支持IF NOT EXISTS子句,以防止在具有给定名称的对象已存在时抛出错误。如果对象已经存在,则忽略该命令,原始对象保持不变。

另一方面,IF EXISTS子句在与ALTER和DROP DDL语句一起使用时会抑制错误。如果不存在给定名称的对象,则忽略该命令,并且没有对象受到ALTER或DROP的影响。

子句的使用或排除为您提供了更多的控制,具体取决于您是否需要在执行DDL语句之前知道对象是否存在。有了这种灵活性,您可以确定是宁愿忽略该语句,还是在对象存在(或不存在)的情况下引发错误。

注意:在使用CREATE DDL语句的命令中,IF NOT EXISTS不能与OR REPLACE结合使用。

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

假设您的架构中不存在同名过程,则执行一次此语句会创建过程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;
/

在这里插入图片描述

在这里插入图片描述

即使更改了存储过程体,多次执行语句也不会导致错误。原来的身体保持不变。

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及之前版本都不支持该语法

在这里插入图片描述

发现创建时编译不成功。去掉IF NOT EXISTS则成功创建,并执行成功!

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.

到此这篇关于Oracle23ai 新特性IF [NOT] EXISTS语法支持的使用的文章就介绍到这了,更多相关Oracle23ai IF [NOT] EXISTS内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Oracle SQL Developer显示的时间包含时分秒的设置方法

    Oracle SQL Developer显示的时间包含时分秒的设置方法

    Oracle SQL Developer是Oracle公司出品的一个免费的集成开发环境,本篇文章给大家介绍Oracle SQL Developer显示的时间包含时分秒的设置方法,需要的朋友参考下吧
    2015-09-09
  • PLSQL安装与使用图文教程

    PLSQL安装与使用图文教程

    这篇文章详细介绍了PL/SQL的下载、安装、配置以及使用方法,内容包括如何下载和安装PL/SQL和Oracle Instant Client,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-02-02
  • mybatis 调用 Oracle 存储过程并接受返回值的示例代码

    mybatis 调用 Oracle 存储过程并接受返回值的示例代码

    这篇文章主要介绍了mybatis 调用 Oracle 存储过程 并接受返回值,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 详解Oracle的sqlldr理论

    详解Oracle的sqlldr理论

    这篇文章主要介绍了详解Oracle的sqlldr理论,SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中,SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL),需要的朋友可以参考下
    2023-07-07
  • Oracle Listener 动态注册 与 静态注册

    Oracle Listener 动态注册 与 静态注册

    注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库
    2015-12-12
  • Oracle/SQL中TO_DATE函数详细实例解析

    Oracle/SQL中TO_DATE函数详细实例解析

    Oracle to_date()函数用于日期转换,下面这篇文章主要给大家介绍了关于Oracle/SQL中TO_DATE函数的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用oracle具有一定的参考解决价值,需要的朋友可以参考下
    2024-06-06
  • oracle 分页问题解决方案

    oracle 分页问题解决方案

    测试说分页查询貌似不起作用,翻到第4页以后,看到的数据结果都是相同的,此等问题应该如何解决,本文将详细介绍
    2012-11-11
  • Oracle递归查询树形数据实例代码

    Oracle递归查询树形数据实例代码

    Oracle数据库中常要处理一些父子关系的记录,在OLTP中要用得多一些,oracle提供了递归查询可以很容易的满足这个需求,下面这篇文章主要给大家介绍了关于Oracle递归查询树形数据的相关资料,需要的朋友可以参考下
    2022-11-11
  • Oracle创建和管理分区索引的操作方法

    Oracle创建和管理分区索引的操作方法

    创建和管理分区索引(Partitioned Index)是数据库管理中的重要任务,特别是在处理大规模数据集时,以下是如何在Oracle数据库中创建和管理分区索引的详细步骤和示例代码,感兴趣的朋友一起看看吧
    2024-08-08
  • oracle中读写blob字段的问题解析

    oracle中读写blob字段的问题解析

    这篇文章以程序实例说明通过JDBC操纵Oracle数据库LOB类型字段的几种情况
    2013-09-09

最新评论