oracle可重复执行脚本

       之前的一次项目上线,使用CTAS的方式进行扩表,涉及到表的删除。由于自动化部署工具的问题,数据库脚本执行了两次。导致数据库表被删除(万幸有备份)。
       抛开自动化部署工具的问题,这一次数据库脚本也存在问题,一个足够健壮的线上数据库脚本应该是可以被重复执行的。下面给出oracle一些常用的可重复执行脚本示例。

表创建

declare
    create_str         varchar(5000) := 'create table TABLE_NAME ...';
    count_flag         number;
begin
    select count(*) into count_flag from user_tables where table_name = 'TABLE_NAME';
    if count_flag > 0 then
        execute immediate create_str;
    else
        execute immediate 'drop table TABLE_NAME';
        execute immediate create_str;
    end if;
end

表字段添加

declare
    add_str         varchar(5000) := 'alter table TABLE_NAME add COLUMN_NAME varchar(32)';
    count_flag         number;
begin
    select count(*) into count_flag from user_tab_columns 
        where table_name = 'TABLE_NAME' and column_name = 'COLUMN_NAME ';
    if count_flag < 1 then
        execute immediate add_str;
    end if;
end

原理很简单,就是利用各种用户视图,判断当前执行结果是否已存在,然后再决定是否执行。虽然简单,但在工程实践中具有较重要意义,需要掌握。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,786评论 0 9
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,119评论 0 10
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,844评论 6 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,793评论 1 32
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 10,158评论 0 30