oracle -> 创建procedure 来实现 drop table if exits table_name 如果表存在则删除。

mysql中如果表存在则删除有语句:drop table if exists schema.table; 但是oracle并不支持这样的语句,可以自己用procedure来实现。亲测有效。

创建procedure来实现drop table if exists schema.table;

--/
create or replace procedure joe.PROC_DROPTABLEIFEXISTS(p_table in varchar2) 
as
    t_count number(10);
begin
   select count(*) into t_count from user_objects where object_name = upper(p_table);
   if t_count > 0 then
      execute immediate 'drop table ' || p_table ||' cascade constraints';
   end if;
end;
/

调用:如果在dbvisualizer中调用的话,开始部分的 --/ 和 结束部分的 / 不能省略,具体原因不清楚。

--/
begin
   joe.PROC_DROPTABLEIFEXISTS('t_integer01');
end;
/

删除其它resource

--/
create or replace procedure joe.PROC_DROPRESOURCEIFEXISTS(r_type in varchar2, r_name in varchar2, r_param01 in varchar2) 
as
    t_count number(10) :=0;
begin
    if upper(r_type)='USER' then
        select count(*) into t_count from all_users where username = upper(r_name);
    else
        select count(*) into t_count from user_objects where object_name = upper(r_name);      
    end if;    
    if t_count > 0 then
        execute immediate 'drop ' ||r_type ||' ' ||  r_name ||' '|| r_param01;
    end if;
end;
/

调用

--/
begin
    joe.PROC_DROPRESOURCEIFEXISTS('view','v01_bigint','cascade constraints');
end;
/

当然

create or replace view  joe.v01_bigint  as select * from joe.t_bigint;

可以直接创建和replace view,不用提前删除。这里只是为了说明调用的方法。

 

posted @ 2022-09-09 11:44  panda4671  阅读(1911)  评论(0编辑  收藏  举报