ORACLE中判断表是否存在再删除表避免报错与MySql和SqlServer的不同

不同数据库中drop a table if it exists的不同:

In MySQL it is pretty easy to drop a table if it exists already. In Oracle and Microsoft's SQL Server it is a little more complicated. Today I want to present you the solutions for these two DBMS'.

MySQL:

sql 复制代码
DROP TABLE IF EXISTS [table_name]

Oracle:

sql 复制代码
BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE [table_name]';
    EXCEPTION WHEN OTHERS THEN NULL;
END;

SQL Server:

sql 复制代码
IF EXISTS (
    SELECT  TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
    WHERE   TABLE_NAME = '[table_name]')
DROP TABLE  [table_name]

ORACLE中先判断表是否存在再新建表一例:

sql 复制代码
declare
 v_exists number;
begin
	   --1、任务类型 TASK_TYPE_CD 建表...
    select count(*) into v_exists from user_tables where table_name = 'EDW_T99_TASK_TYPE_CD';
    if v_exists > 0 then
    execute immediate 'drop table EDW_T99_TASK_TYPE_CD';
    end if;
    execute immediate '
    create table EDW_T99_TASK_TYPE_CD
    (
      CODE_CD   VARCHAR2(20) PRIMARY KEY,
      CODE_DESC VARCHAR2(100)
    )';
    execute immediate 'comment on table EDW_T99_TASK_TYPE_CD is ''任务类型''';
    execute immediate 'comment on column EDW_T99_TASK_TYPE_CD.CODE_CD is ''代码''';
    execute immediate 'comment on column EDW_T99_TASK_TYPE_CD.CODE_DESC is ''代码描述''';

	   --2、买入产品代码 BUY_TYPE_CD 建表...
    select count(*) into v_exists from user_tables where table_name = 'EDW_T99_BUY_TYPE_CD';
    if v_exists > 0 then
    execute immediate 'drop table EDW_T99_BUY_TYPE_CD';
    end if;
    execute immediate '
    create table EDW_T99_BUY_TYPE_CD
    (
      CODE_CD   VARCHAR2(20) PRIMARY KEY,
      CODE_DESC VARCHAR2(100)
    )';
    execute immediate 'comment on table EDW_T99_BUY_TYPE_CD is ''买入产品代码''';
    execute immediate 'comment on column EDW_T99_BUY_TYPE_CD.CODE_CD is ''代码''';
    execute immediate 'comment on column EDW_T99_BUY_TYPE_CD.CODE_DESC is ''代码描述''';
	   
end;
/

此例用在数据仓库项目的建T99代码表脚本方案上;此脚本在方案中用Perl根据Excel生成。

相关推荐
hqxstudying20 分钟前
MyBatis 和 MyBatis-Plus对比
java·数据库·mysql·mybatis
DarkAthena34 分钟前
AI生成技术报告:GaussDB与openGauss的HTAP功能全面对比
数据库·gaussdb
好奇的菜鸟1 小时前
使用 Apache Flink CDC 3.0 实现 MySQL 到 Elasticsearch 的数据同步
mysql·flink·apache
jumin18061 小时前
python采用jdbc连接oracle
python·oracle
励志五个月成为嵌入式糕手1 小时前
0820 SQlite与c语言的结合
c语言·oracle·sqlite
DemonAvenger2 小时前
高效JOIN操作:多表关联查询技巧与实战经验分享
数据库·mysql·性能优化
小云数据库服务专线3 小时前
GaussDB 数据库架构师修炼(十八) SQL引擎-分布式计划
数据库·数据库架构·gaussdb
秋已杰爱4 小时前
Redis分布式锁
数据库·redis·分布式
haogexiaole11 小时前
Redis优缺点
数据库·redis·缓存
在未来等你11 小时前
Redis面试精讲 Day 27:Redis 7.0/8.0新特性深度解析
数据库·redis·缓存·面试