有人知道为什么第一个查询会导致抛出此错误而第二个查询有效吗?
ORA-01882:未找到时区区域01882. 00000 - "未找到时区区域%s"
导致错误:在时区选择SYSTIMESTAMP(选择 t.TIME_ZONE 从某个时间开始t.TIME_ZONE =' America / Denver&#39 ;和ROWNUM = 1) 来自DUAL
正确工作:在时区选择SYSTIMESTAMP(选择' America / Denver' FROM SOME_TABLE t WHERE ROWNUM = 1) 来自DUAL
注意:这是在Oracle Database 11g 11.2.0.4.0版 - 64位db上运行的。我已验证两个查询在具有相同数据库版本的另一个数据库上正确。不确定还有什么可能导致这种情况。
答案 0 :(得分:1)
总结根本原因,它与t.TIME_ZONE的数据类型(NVARCHAR2)有关。这是一个示例,显示11g中不支持NVARCHAR2时区名称:
不起作用:按时间区域选择SYSTIMESTAMP(' America / Denver' as NVARCHAR2 (80))FROM DUAL
工作:在时区CAST选择SYSTIMESTAMP(' America / Denver' as VARCHAR2 (80))FROM DUAL
在TO_CHAR()中包装t.TIME_ZONE解决了问题。