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行
2条答案
按热度按时间avwztpqn1#
如果要使用会话参数设置格式,则必须设置
NLS_TIMESTAMP_TZ_FORMAT
而不是NLS_DATE_FORMAT
。这是因为DBMS_SCHEDULER.CREATE_SCHEDULER.START_DATE
和END_DATE
参数是TIMESTAMP WITH TIME ZONE
类型,而不是DATE
类型。但我强烈建议您遵循MT 0的建议,使用日期和时间戳文字,如下所示:
字符串
与转换为日期或时间戳的字符串相比,日期和时间戳文字有许多优点:ISO-8601格式是明确的,并作为字符串正确排序,编译器将值视为文字(这在少数情况下对优化器有帮助),而且月份也不含糊(月份缩写“OCT”并不适用于每种语言和日历)。除非您的程序正在显示数据,否则应避免依赖会话或系统格式。
要回答您的新问题,您可以通过将
ALTER SESSION
更改为ALTER DATABASE
来更改整个数据库的设置。但这种更改几乎肯定是一个错误。系统格式参数经常被会话参数覆盖,这取决于您使用的IDE,它可能会从本地计算机的区域设置中读取。如果您经常更改并依赖系统参数进行格式化,您将创建奇怪的场景,其中代码可能适用于使用TOAD的讲英语的美国人,但代码将无法用于使用Oracle SQL Developer的讲法语的加拿大人。使用文字来避免日期格式地狱。
vxqlmq5t2#
您在create_schedule命令中使用了破折号“-”,但NLS格式中有斜杠“/”