Pentaho Kettle 大喊 SQL 甲骨文没有的脚本错误

Pentaho Kettle yells SQL Script error that Oracle doesn't

我有一个执行数十个 SQL 查询任务的 ETL 进程。

有人特别不断地向我的一个查询抛出错误:"ORA-01843: not a valid month",但是同一个查询在 PL/SQL 上正常运行。我什至创建了一个具有相同查询版本的过程,它也运行顺利,但是从 pentaho 调用这个过程总是抛出同样的错误。拜托,任何人都知道为什么 pentaho 会显示 PL/SQL 不是的查询错误?提前致谢!

如果你这样做:

SELECT TO_DATE('01-FEB-03', 'DD-MON-RR') FROM DUAL;

然后,在具有默认设置的英文数据库上,查询有效

然后您更改会话设置:

ALTER SESSION SET NLS_DATE_LANGUAGE = 'FRENCH';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';

和运行相同的查询:

SELECT TO_DATE('01-FEB-03', 'DD-MON-RR') FROM DUAL;

你会得到错误:

ORA-01843: not a valid month

解决这个问题的三种方法:

  1. 对两个查询使用相同的设置 - 这不是一个可靠的解决方案,因为您可能会为某些服务指定设置,然后它可以工作一段时间,但随后新的开发人员出现并连接了一个新服务,不知道所需的设置,突然一切都坏了。

  2. 指定要在查询中使用的设置。

    SELECT TO_DATE(
             '01-FEB-03',
             'DD-MON-RR',                -- Specify the format
             'NLS_DATE_LANGUAGE=English' -- Specify the language
           )
    FROM DUAL;
    
  3. 使用日期文字(与设置无关):

    SELECT DATE '2003-02-01' FROM DUAL;
    

db<>fiddle here