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
解决这个问题的三种方法:
对两个查询使用相同的设置 - 这不是一个可靠的解决方案,因为您可能会为某些服务指定设置,然后它可以工作一段时间,但随后新的开发人员出现并连接了一个新服务,不知道所需的设置,突然一切都坏了。
指定要在查询中使用的设置。
SELECT TO_DATE(
'01-FEB-03',
'DD-MON-RR', -- Specify the format
'NLS_DATE_LANGUAGE=English' -- Specify the language
)
FROM DUAL;
使用日期文字(与设置无关):
SELECT DATE '2003-02-01' FROM DUAL;
db<>fiddle here
我有一个执行数十个 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
解决这个问题的三种方法:
对两个查询使用相同的设置 - 这不是一个可靠的解决方案,因为您可能会为某些服务指定设置,然后它可以工作一段时间,但随后新的开发人员出现并连接了一个新服务,不知道所需的设置,突然一切都坏了。
指定要在查询中使用的设置。
SELECT TO_DATE( '01-FEB-03', 'DD-MON-RR', -- Specify the format 'NLS_DATE_LANGUAGE=English' -- Specify the language ) FROM DUAL;
使用日期文字(与设置无关):
SELECT DATE '2003-02-01' FROM DUAL;
db<>fiddle here