-- 自动创建“下个月”设备参数月分表与 RT 触发器的数据库任务
-- 兼容：Oracle 11 / Oracle 19
-- 说明：
-- 1. 数据库在每月 26 日凌晨 02:00 提前创建下个月物理分表和触发器。
-- 2. C# 采集程序使用 sqlSugar 按 collect_time 自动路由写入，不再负责建表或补触发器。
-- 3. 本脚本会顺带清理旧的“每月 1 日 00:15 补触发器”任务，避免两个 job 并存造成职责冲突。

BEGIN
    DBMS_SCHEDULER.DROP_JOB(
        JOB_NAME => 'JOB_ENSURE_DEVICE_PARAM_TRIGGER',
        FORCE    => TRUE
    );
EXCEPTION
    WHEN OTHERS THEN
        IF SQLCODE != -27475 THEN
            RAISE;
        END IF;
END;
/

BEGIN
    DBMS_SCHEDULER.DROP_JOB(
        JOB_NAME => 'JOB_AUTO_PREPARE_MONTHLY',
        FORCE    => TRUE
    );
EXCEPTION
    WHEN OTHERS THEN
        IF SQLCODE != -27475 THEN
            RAISE;
        END IF;
END;
/

BEGIN
    DBMS_SCHEDULER.CREATE_JOB(
        JOB_NAME        => 'JOB_AUTO_PREPARE_MONTHLY',
        JOB_TYPE        => 'PLSQL_BLOCK',
        JOB_ACTION      => 'BEGIN PKG_DEVICE_PARAM_MONTHLY.AUTO_PREPARE_NEXT_MONTH; END;',
        START_DATE      => SYSTIMESTAMP,
        REPEAT_INTERVAL => 'FREQ=MONTHLY;BYMONTHDAY=26;BYHOUR=2;BYMINUTE=0;BYSECOND=0',
        ENABLED         => TRUE,
        AUTO_DROP       => FALSE,
        COMMENTS        => '每月26日提前创建下个月设备参数分表与RT触发器'
    );
END;
/

-- 首次部署后如需立即补齐当前月，可手工执行：
-- BEGIN
--     PKG_DEVICE_PARAM_MONTHLY.PREPARE_MONTH(TO_CHAR(TRUNC(SYSDATE, ''MM''), ''YYYYMM''));
-- END;
-- /

-- 查看状态：
-- SELECT JOB_NAME, ENABLED, STATE, LAST_START_DATE, NEXT_RUN_DATE
--   FROM USER_SCHEDULER_JOBS
--  WHERE JOB_NAME = 'JOB_AUTO_PREPARE_MONTHLY';
