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,不用提前删除。这里只是为了说明调用的方法。