ORA-01890: NLS error detected
Cause: An NLS error was detected.
Action: Look for additional error messages and take appropriate action. If there are no additional errors, call Oracle Worldwide Support.
ORA-01890错误是一个通用及全局错误,它表示操作中预期的一个本地化参数格式不正确。这个错误在系统及客户端之间无缝交互以及字符的翻译过程中可能会出现。
1)首先,您需要找出导致 ORA-01890 的原因,对 SQL 语句的每一列运行以下查询:
SELECT data_type
FROM user_tab_columns
WHERE table_name = ‘SOME_TABLE’
AND lower(column_name) = ‘somecolumn’;
2)检查 NLS 参数:
SELECT *
FROM nls_session_parameters
ORDER BY parameter;
3)检查NLS_LANG 全局变量:
SHOW PARAMETER NLS_LANG
4)查看游标是否已设定为保存PDSE:
SELECT value
FROM v$parameter
WHERE name = ‘open_cursors’;
如果 PDSE 被指定为保存,则需重新设置该参数:
ALTER SYSTEM SET open_cursors=xxx;
5)检查字符集是否相同:
SELECT value
FROM nls_database_parameters
WHERE parameter = ‘NLS_CHARACTERSET’;
SELECT value
FROM nls_instance_parameters
WHERE parameter = ‘NLS_CHARACTERSET’;
如果两个值不同,请联系系统管理员,重新设置它们。
6)最后查看在系统上是否存在日期格式不匹配的问题:
SELECT*
FROMNLS_SESSION_PARAMETERS
WHERE PARAMETER=’NLS_DATE_FORMAT’;
如果格式不匹配,您可以尝试将 NLS_DATE_FORMAT 参数更改为和数据库中相匹配的格式,如:
ALTER SESSION SET NLS_DATE_FORMAT=’dd-mm-yyyy hh24:mi:ss’;