【问题标题】:ORA-01830 Error for 11.2.0 client but not for 10.2 clientORA-01830 11.2.0 客户端错误,但 10.2 客户端错误
【发布时间】:2014-11-24 11:27:20
【问题描述】:

我有这段代码:

BEGIN
   DBMS_SCHEDULER.DROP_JOB (
   job_name => 'LOANSBUILD.LOANSNEWYORKCLOSE');
END;
/

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name           =>  '***.LOANSNEWYORKCLOSE',
    job_type           =>  'PLSQL_BLOCK',
    job_action         =>  'begin loans_schedule_job.loans_close(TRUNC(SYSDATE), ''N''); end;',
    start_date         =>  '15-NOV-08 12.00.00.000000000 AM AMERICA/NEW_YORK',
    repeat_interval    =>    'FREQ=WEEKLY;BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=16;BYMINUTE=0;BYSECOND=0',
    auto_drop          =>   FALSE,
    job_class          =>  'DEFAULT_JOB_CLASS',
    enabled             =>   TRUE,
    comments           =>  'Test.'
);
END;  
/
exit;

在安装了 oracle sql 客户端 10.2 的环境中执行上述操作时,一切正常,但在安装了 11.2 客户端的环境中执行相同操作时,失败如下:

开始 * 第 1 行的错误: ORA-01830: 日期格式图片在转换整个输入字符串之前结束 ORA-06512: 在第 2 行

变量 nls_date_format 在 10.2 环境中设置为“DD-MON-RR”,在 11.2 环境中设置为“YYYY-MM-DD HH24:MI:SS”。

由于这是为 10.2 环境编译的,我在 11.2 环境中更新了 nls_lang_date 以使其成为“DD-MON-RR”,但即使在此之后我也得到了同样的错误。还有什么我应该设置的。

请注意,我是系统管理员,由于此代码是在服务器上编译的,我的工作是确保它也适用于其他人。这也意味着我没有更新代码的权限。

【问题讨论】:

    标签: oracle11g oracle10g


    【解决方案1】:

    根据CREATE_JOB Procedure documentation,参数start_date必须是TIMESTAMP WITH TIME ZONE类型。

    在您的 PL/SQL 代码中,您传递的是一个字符串,因此依赖于隐式转换。

    您可以改为使用显式转换为 TIMESTAMP WITH TIME ZONE 数据类型,例如:

    TO_TIMESTAMP_TZ('15-NOV-08 12.00.00.000000000 AM AMERICA/NEW_YORK', 'DD-MON-RR HH:MI:SS.FF AM TZR')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 2011-10-03
      • 2018-10-29
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多