首页 > 数据库 > Oracle > NLS_LANGUAGE配置导致应用查询不到数据
开发人员反馈系统查询不显示数据,但是使用PL/SQL developer调用相同的SQL可以查到数据。
2.使用SQLPlus在数据库后台查询反馈的SQL,同样无法查询到数据。SQL调用的是一个视图,在用SQLPlus查询,该视图返回0条数据,但是PL/SQL Developer返回6万多条数据。
SQL> SELECT COUNT(*) FROM APP_ADJ_HEADERS_V; COUNT(*) ---------- 0
3.查看视图的创建语句,发现有如下内容:
where
aa.LANGUAGE = USERENV('LANG')
bb.LANGUAGE = USERENV('LANG')
SQL> alter session set nls_language="AMERICAN";
Session altered.
SQL> select userenv('lang') from dual;
USERENV('LANG')
----------------------------------------------------
US
SQL> alter session set nls_language="SIMPLIFIED CHINESE";
会话已更改。
SQL> select userenv('lang') from dual;
USERENV('LANG')
----------------------------------------------------
ZHS
四、参考学习
由NLS_LANGUAGE指定的这种语言用于messages, day and month names, symbols for AD, BC, a.m., and p.m以及默认的排序机制。 此参数还确定参数NLS_DATE_LANGUAGE和NLS_SORT的默认值。
NLS_LANGUAGE参数的值用于初始化此参数的会话值,该值是SQL查询处理引用的实际值。 如果客户端使用Oracle JDBC驱动程序或客户端基于OCI并且定义了NLS_LANG客户端设置(环境变量),则此初始值将被NLS_LANG覆盖。 因此,通常会忽略初始化参数值。
NLS_LANG=NLS_LANGUAGE+NLS_TERRITORY+NLS_CHARACTERSETNLS
作用优先级:SQL FUNCTION>alter session>环境变量或注册表>参数文件>数据库默认参数
相关视图:nls_database_parameters、nls_instance_parameters、nls_session_parameters
export NLS_LANG="SIMPLIFIED CHINESE_AMERICA.AL32UTF8" #注意永久保存要写入环境变量中
SQL> SELECT COUNT(*) FROM APPS_ADJ_HEADERS_V; COUNT(*) ---------- 0 SQL> alter session set nls_language='SIMPLIFIED CHINESE'; 会话已更改。 SQL> SELECT COUNT(*) FROM APPS_ADJ_HEADERS_V; COUNT(*) ---------- 63579
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31355629/viewspace-2723018/ ,如需转载,请注明出处,否则将追究法律责任。