针对不能重复执行的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; /