oracle删除表,如果表不存在,就报错,在跑大型脚本(脚本长且耗时的时候)比较麻烦,一般希望的是点开始然后脚本运行到结束,不可能一直盯着屏幕等弹出提示手工点掉,mysql就很好有drop table if not exist功能

CREATE OR REPLACE PROCEDURE p_drop_table_if_exist(p_vc2_tbl_name  IN all_tables.table_name%TYPE,
p_vc2_tbl_owner IN all_tables.owner%TYPE DEFAULT USER) IS
v_num_tbl_count NUMBER(4);
v_vc2_sql_stmt VARCHAR2(1000);
BEGIN
-- Check if table already exists
p_chk_table_exist(p_vc2_tbl_name, p_vc2_tbl_owner, v_num_tbl_count);
IF (v_num_tbl_count != 0) THEN
-- Table already exists and must be dropped
v_vc2_sql_stmt := 'DROP TABLE ' || CASE
WHEN p_vc2_tbl_owner IS NOT NULL THEN
p_vc2_tbl_owner || '.'
END || p_vc2_tbl_name || ' purge'
;
--dbms_output.put_line(v_vc2_sql_stmt);
EXECUTE IMMEDIATE v_vc2_sql_stmt;
END IF;
END; CREATE OR REPLACE PROCEDURE p_chk_table_exist(p_vc2_tbl_name IN all_tables.table_name%TYPE,
p_vc2_tbl_owner IN all_tables.owner%TYPE DEFAULT USER,
p_num_tbl_count OUT NUMBER -- 1 if table exists, 0 if it doesn't
) IS
v_vc2_tbl_name all_tables.table_name%TYPE := UPPER(p_vc2_tbl_name);
BEGIN IF p_vc2_tbl_owner IS NOT NULL THEN
SELECT COUNT(1)
INTO p_num_tbl_count
FROM all_tables
WHERE table_name = v_vc2_tbl_name
AND owner = UPPER(p_vc2_tbl_owner);
ELSE
SELECT COUNT(1)
INTO p_num_tbl_count
FROM user_tables
WHERE table_name = v_vc2_tbl_name;
END IF;
END p_chk_table_exist;

have fun

oracle自定义存储过程:删除表(无论表是否存在)和检测表是否存在的更多相关文章

  1. Oracle库Delete删除千万以上普通堆表数据的方法

    需求:Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操 ...

  2. Oracle中存储过程传入表名学习

    Oracle中存储过程传入表名: 一.动态清除该表的数据 create or replace procedure p_deletetable(i_tableName in varchar2)  as  ...

  3. MySQL 存储过程删除大表

    1.权限问题 alter routine 编辑或删除存储过程 create routine 建立存储过程 execute 创建存储过程 2.存储过程相关的一些命令 show procedure sta ...

  4. 如何恢复oracle中已删除的表

    在9i中Oracle引入了flashback的概念,可以将数据返回到某个时间点,但对于诸如drop/truncate等DDL语句却尚不支持.进入Oracle10g,这一缺陷得到了弥补.可以将丢失掉的表 ...

  5. spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站

      1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建 ...

  6. Oracle使用游标删除所有用户数据表中的所有记录脚本

    应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自 ...

  7. oracle分区表彻底删除的办法,处理删不掉的不规则表名

    Oracle分区表彻底删除的办法当对一个不再使用的分区表进行drop后,查询user_tab_partitions视图发现出现如下不规则的分区表表名:SQL> select distinct t ...

  8. 关于从Oracle数据库中删除表数据

    1,删除表 drop 1.1 执行drop table table_name  语句 被 drop后的表被放在用户回收站(user_recyclebin)里,而没有被直接删除掉,回收站里的表可以被恢复 ...

  9. Oracle数据库delete删除普通堆表千万条记录

    Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操作. ...

随机推荐

  1. 测试环境部署之填坑记录-Expected one result (or null) to be returned by selectOne(), but found: 2

    最近在部署性能测试环境的时候,环境 部署好以后,部分功能出现接口查询异常,问题现象: 拿到错误,肯定要先判断是前端还是后端代码的问题,最简单的方式是抓包查看: 以上是报错页面捕获的接口报错,很明显的接 ...

  2. PEMDAS 操作順序

    關於計算子 Operator 的操作順序,在"像計算機科學家一樣思考Python"這書 [1] 寫的明白扼要.它以 PEMDAS 這幾個簡單的英文字開頭表明: P (Parenth ...

  3. Swift零基础教程2019最新版(一)搭建开发环境

    Swift简单介绍 Swift是苹果强力推荐的新型开发语言,能开发苹果下属所有软件平台(iOS,iPadOS,macOS,watchOS,tvOS)初学者如果想进入苹果的开发体系,从Swift开始学习 ...

  4. linux下安装oracle数据库--干货

    1.修改系统名称,关闭防火墙,selinux.2.挂载镜像,并写入开机自动挂载.挂载点为/mnt/yummount -t iso9660 -o,loop /soft/Centos6.iso /mnt/ ...

  5. opensciencegrid - GridFTP 安装

    最近配置一个GridFTP 用于测试其传输FTP性能, 在这里简单记录,备忘:使用本教程可以简单起一个GridFTP用于测试服务: 预配置环境: 测试系统:CentOS 7 1806 配置Yum仓库: ...

  6. leetcode回溯算法--基础难度

    都是直接dfs,算是巩固一下 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 思路 一直 ...

  7. 一段tomcat的maven插件配置

    <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-mave ...

  8. go设计模式--单例singleton

    创建型第一个,使用TDD作的. singleton.go package singleton type Singleton interface { AddOne() int } type single ...

  9. HTML5常见的取值与单位

    HTML5常见的取值与单位     长度单位包括 相对长度单位包括:em, ex, ch, rem, vw, vh, vmax, vmin 绝对长度单位包括:cm, mm, q, in, pt, pc ...

  10. 【oi模拟赛】长乐中学-不知道多少年

    改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作"左孩子"和"右孩子" ...