zoukankan      html  css  js  c++  java
  • oracle自定义存储过程:删除表(无论表是否存在)和检测表是否存在

    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

  • 相关阅读:
    mysql 查询技巧
    如何查看mysql索引
    windows下安装redis以及简单的事例
    Buildroot make网卡interfaces文件被修改
    VirtualBox只能生成32位虚拟机
    python-websocket-server hacking
    crontab定时任务
    Linux修改串口irq
    emmc boot_config文件不存在
    /dev/mem直接操作硬件寄存器
  • 原文地址:https://www.cnblogs.com/yongestcat/p/11835935.html
Copyright © 2011-2022 走看看