一、原因
在mysql中,我们常使用类似:
drop table if exists tableName;
但是在oracle中却不存在if exists这样的语法结构,因此当我们需要实现
支持重跑的表/序列等对象,我们需要构建存储过程实现。
二、实现方式
--以构建t_sys_log表为例
create procedure dp_t_sys_log
is
tmp_name varchar2(50);
begin
select table_name into tmp_name from user_tables where table_name = upper('t_sys_log'); --到系统表user_tables中查看是否已存在t_sys_log表
if length(tmp_name) > 0 then
execute immediate 'drop table t_sys_log';
end if;
/*
--当为序列时
select sequence_name into tmp_name from user_sequences where sequence_name = upper('seq_sys_log');
if length(tmp_name) > 0 then
execute immediate 'drop sequence seq_sys_log';
end if;
*/
/*
--当为dblink时
类比上面的方式即可
*/
exception
when no_data_found then
begin
null;
end;
end;
/
exec dp_t_sys_log; --创建表前先执行该存储过程
drop procedure dp_t_sys_log; --删掉存储过程
create table t_sys_log();
--上述过程即可实现建表语句的重跑,避免出现error