oracle 无法从重复间隔确定有效的执行日期

w8rqjzmb  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(214)
alter session set nls_date_format = 'DD/mon/YYYY HH24:MI:SS';

BEGIN

dbms_scheduler.create_schedule (
    schedule_name   => 'schedule_meter_reading',
    start_date      => '31-OCT-2023 20:00:00',
    repeat_interval => 'FREQ=MINUTELY; INTERVAL=5',
    end_date        => '31-OCT-2023 21:00:00',
    comments        => 'repeated every 5 minutes'
   
);

END;

BEGIN
    DBMS_SCHEDULER.drop_schedule (schedule_name => 'schedule_meter_reading');
END;

BEGIN
    dbms_scheduler.create_program(program_name => 'add_meter_reading', program_type => 'PLSQL_BLOCK', program_action => 'BEGIN show_time; END;'
    , enabled => true, comments => 'Reading data from the meter');
END;

BEGIN
    dbms_scheduler.create_job(job_name => 'Add_reading', program_name => 'add_meter_reading', start_date => systimestamp, repeat_interval => 'schedule_meter_reading', enabled => true);
END;

字符串
尝试构建计划程序job. job。尝试创建作业时,收到错误:
报告报告-
ORA-27419:无法根据重复间隔确定有效执行日期
ORA-06512:在“DBMS_ISCHED”,第175行
ORA-06512:在“DBMS_SCHEDULER”,第485行
ORA-06512:第2行

avwztpqn

avwztpqn1#

如果要使用会话参数设置格式,则必须设置NLS_TIMESTAMP_TZ_FORMAT而不是NLS_DATE_FORMAT。这是因为DBMS_SCHEDULER.CREATE_SCHEDULER.START_DATEEND_DATE参数是TIMESTAMP WITH TIME ZONE类型,而不是DATE类型。
但我强烈建议您遵循MT 0的建议,使用日期和时间戳文字,如下所示:

start_date => timestamp '2023-10-31 20:00:00'

字符串
与转换为日期或时间戳的字符串相比,日期和时间戳文字有许多优点:ISO-8601格式是明确的,并作为字符串正确排序,编译器将值视为文字(这在少数情况下对优化器有帮助),而且月份也不含糊(月份缩写“OCT”并不适用于每种语言和日历)。除非您的程序正在显示数据,否则应避免依赖会话或系统格式。
要回答您的新问题,您可以通过将ALTER SESSION更改为ALTER DATABASE来更改整个数据库的设置。但这种更改几乎肯定是一个错误。系统格式参数经常被会话参数覆盖,这取决于您使用的IDE,它可能会从本地计算机的区域设置中读取。如果您经常更改并依赖系统参数进行格式化,您将创建奇怪的场景,其中代码可能适用于使用TOAD的讲英语的美国人,但代码将无法用于使用Oracle SQL Developer的讲法语的加拿大人。
使用文字来避免日期格式地狱。

vxqlmq5t

vxqlmq5t2#

您在create_schedule命令中使用了破折号“-”,但NLS格式中有斜杠“/”

相关问题