用ORACLE 的 declare, 如果对象不存在则创建,否则跳过

set define off ;
set serveroutput on;

--检查是否曾购买过特定产品
delete from  t_discount_obj where   Field_Code ='isHadBuySpecProd';
insert into t_discount_obj ( id,Field_Code,description,macro_code,del_flag)  values(s_id.nextval, 'isHadBuySpecProd','是否曾买过特定产品', 'isHadBuySpecProd',0);
delete from  t_ar_cacl_obj  where   Field_Code = 'isHadBuySpecProd';
insert into t_ar_cacl_obj   ( id,Field_Code,description,macro_code,del_flag)  values (s_id.nextval , 'isHadBuySpecProd','是否曾买过特定产品', 'isHadBuySpecProd',0);

--此为空壳函数,业务逻辑以本地为主
DECLARE
  ct integer;
BEGIN
  select COUNT(*) into ct from user_objects where object_name ='FUN_DISC_COND_ISHADBUYSPECPROD';
  if ct= 0 then
    dbms_output.put_line('fun_disc_cond_isHadBuySpecProd不存在,可以创建');  
    --单引号内的语句为创建函数语句
    execute immediate '
      --创建函数语句开始
      create or replace function fun_disc_cond_isHadBuySpecProd(v_id in number)
      return number as
      begin
        return 0 ;
      exception
        when others then
           return - 1;
      end fun_disc_cond_isHadBuySpecProd;
      --创建函数语句结束
    ' ;
  else
      dbms_output.put_line('fun_disc_cond_isHadBuySpecProd已经存在,跳过创建');  
  end if;
END;
/

参考:https://www.cnblogs.com/champaign/p/9468342.html

set serveroutput on
declare
i integer;
begin
select count(*) into i from user_tables where table_name = 'TMP_T_CATER_DELIVERYADDRESS';
if i > 0 then
dbms_output.put_line('该表已存在!');
execute immediate 'DROP TABLE TMP_T_CATER_DELIVERYADDRESS';
else
dbms_output.put_line('该表不存在');
end if;
execute immediate 'CREATE TABLE TMP_T_CATER_DELIVERYADDRESS(id int primary key,name varchar(50))';
end;

  

原文地址:https://www.cnblogs.com/scoluo/p/15237423.html