欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle使用函数达到drop table if exists

程序员文章站 2022-06-04 11:25:23
...

在oracle初始化脚本执行的时候如果如果已经存在相关对象则会导致后续执行失败,通过定义存储过程实现mysql中drop table if exists

新增索引的删除判断

create or replace procedure dropObject(ObjName varchar2, ObjType varchar2)
is
  v_counter number := 0;   
begin
  if upper(ObjType) = 'TABLE' then
    select count(*) into v_counter from user_tables where table_name = upper(ObjName);
    if v_counter > 0 then          
      execute immediate 'drop table ' || ObjName || ' cascade constraints';        
    end if;   
  end if;
  if upper(ObjType) = 'PROCEDURE' then
    select count(*) into v_counter from User_Objects where object_type = 'PROCEDURE' and OBJECT_NAME = upper(ObjName);
      if v_counter > 0 then          
        execute immediate 'DROP PROCEDURE ' || ObjName;        
      end if; 
  end if;
  if upper(ObjType) = 'FUNCTION' then
    select count(*) into v_counter from User_Objects where object_type = 'FUNCTION' and OBJECT_NAME = upper(ObjName);
      if v_counter > 0 then          
        execute immediate 'DROP FUNCTION ' || ObjName;        
      end if; 
  end if;
  if upper(ObjType) = 'TRIGGER' then
    select count(*) into v_counter from User_Triggers where TRIGGER_NAME = upper(ObjName);
      if v_counter > 0 then          
        execute immediate 'DROP TRIGGER ' || ObjName;
      end if; 
  end if;
  if upper(ObjType) = 'VIEW' then
    select count(*) into v_counter from User_Views where VIEW_NAME = upper(ObjName);
      if v_counter > 0 then          
        execute immediate 'DROP VIEW ' || ObjName;        
      end if; 
  end if;
  if upper(ObjType) = 'SEQUENCE' then
    select count(*) into v_counter from user_sequences where sequence_name = upper(ObjName);
      if v_counter > 0 then          
        execute immediate 'DROP SEQUENCE ' || ObjName;        
      end if; 
  end if;
  if upper(ObjType) = 'INDEX' then
    select count(*) into v_counter from user_indexes where index_name = upper(ObjName);
      if v_counter > 0 then          
        execute immediate 'DROP INDEX ' || ObjName;        
      end if; 
  end if;
end;
/

-- 使用
call dropObject('bos_job_group', 'table');
相关标签: drop table