针对不能重复执行的SQL,如创建表,创建雾化视图等前面增加判断条件

一、创建表之前判断是否已经存在,存在就DROP掉,不存在就直接创建

DECLARE
      T_NUM  PLS_INTEGER := 0; 
BEGIN
    SELECT COUNT(1) INTO T_NUM FROM USER_TABLES WHERE TABLE_NAME = UPPER('SYS_LOGS') ;
    IF T_NUM > 0 THEN
        EXECUTE IMMEDIATE 'DROP TABLE SYS_LOGS' ;
    END IF;
END;
/

  *PLS_INTEGER 可以存储一个有符号的整形值,其精度范围和BINARY_INTEGER一样,是:-2^31~2^31。

  PLS_INTEGER和NUMBER比较起来,其优点是:

    1).占有较少的存储空间;

    2).可以直接进行算术运算,效率更高(在NUMBER上不能直接进行算术运算,如果要计算,NUMBER必须先被转换成二进制)。

二、创建雾化视图(MATERIALIZED VIEW)前,先判断是否存在,存在就先删除。

declare
  T_NUM pls_integer := 0;
begin
  select count(1)
    into T_NUM
    from user_mviews
   where mview_name = 'V_M_TEST';
  if T_NUM = 1 then
    execute immediate 'drop MATERIALIZED VIEW V_M_TEST';
    commit;
  end if;
end;
/

  

原文地址:https://www.cnblogs.com/bert227/p/13494535.html