oracle查询nls_language,NLS_LANGUAGE配置导致应用查询不到数据
一、故障现象反馈
开发人员反馈系统查询不显示数据,但是使用PL/SQL developer调用相同的SQL可以查到数据。
二、问题排查
1.咨询开发人员是否执行相关事务未提交,确认未有相关事务执行。
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')
三、问题分析
根据视图的创建语句过滤条件可知,如果aa.LANGUAGE = USERENV('LANG')和bb.LANGUAGE = USERENV('LANG')不满足,则不返回数据。
而USERENV('LANG')的取值是根据当前会话的NLS_LANGUAGE返回的。
当NLS_LANGUAGE为AMERICAN时,值为US。
当NLS_LANGUAGE为SIMPLIFIED CHINESE时,值为ZHS。
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
五、解决办法
修改应用端的NLS_LANG的配置与SQL保持一致
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
oracle查询nls_language,NLS_LANGUAGE配置导致应用查询不到数据相关推荐
- oracle分页置顶,[置顶] ibatis查询oracle分页
开发采用spring+struts+ibatis+extjs,数据库用oracle ibtais配置分页 模糊查询 Java代码 bmzdm LIKE '%$objCondition.bmzdm$%' ...
- Oracle性能误区--MTS,RAC,分区,并行查询
Oracle性能误区--MTS,RAC,分区,并行查询 学习一项新的东西前需要理解其目的,下面这篇文章侧面介绍了ORACLE中RAC等4个组件的优缺点,以供日后参考.下面为文章全文: 为了提高性能,我 ...
- oracle ora 47306,Oracle SQL提示含义与示例 --- 分布式查询和并行提示
<Oracle 高性能SQL引擎剖析:Oracle SQL 优化与调优技术详解>一书的附录部分.作为对该书的补充,帮助读者理解和掌握"提示"这一项在SQL优化中使用的这 ...
- oracle 11g circuits 参数,递归:在 Oracle Database 11g 第 2 版中查询层次结构数据
开发人员:SQL 递归: 在 Oracle Database 11g 第 2 版中查询层次结构数据的快速入门 作者:Tim Hartley 2010 年 2 月发表 递归数据库处理,也称为材料清单 或 ...
- rowbounds分页oracle,Oracle使用MyBatis中RowBounds实现分页查询功能
Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便. 使用MyBatis中的RowBounds进行 ...
- 日常工作问题解决:centos7下配置网卡以及查询网卡UUID
日常工作问题解决:centos7下配置网卡以及查询网卡UUID 参考文章: (1)日常工作问题解决:centos7下配置网卡以及查询网卡UUID (2)https://www.cnblogs.com/ ...
- 怎样学好Oracle子查询,Oracle学习(六):子查询
Oracle学习(6):子查询 子查询 为何要用子查询 SQL> --查询工资比SCOTT高的员工信息 SQL> --1. 知道SCOTT的工资 SQL> select sal fr ...
- mybatis一级缓存导致sql查询出现问题
如下代码: PubPsndoc pubdoc = pubPsndocDAOService.selectByPrimaryKey(in.id);pubdoc.setPkCorp(newpkcorp);p ...
- PHP的mongo扩展版本过低导致无法查询
PHP的mongo扩展版本过低导致无法查询,错误如下: Fatal error: Uncaught exception 'MongoCursorException' with message 'cou ...
最新文章
- 昨天,我用 Python 写了一个婚介模型
- 内核电源管理器已启动关机转换_Linux系统启动流程
- sqlserver 性能问题
- stm32 can bus 总结
- PowerShell管理Azure
- 禁止更改计算机名_【复习收藏】计算机操作系统考点归纳
- 盒马鲜生,快而准确的秘密!
- micropython 实时音频传输_在线实时合唱的实现原理与难点是什么?
- 【CF1047D】Little C Loves 3 II【构造】【赛瓦维斯特定理】
- 《论文笔记》Cooperative Multi-Robot Monocular-SLAM using Salient Landmarks
- NameError: name ‘List‘ is not defined
- C# 用正则表达式替换字符串中所有特殊字符
- 03. Use const whenever possible
- Picasso,Glide,Fresco对比分析
- [Hadoop]Hive r0.9.0中文文档(二)之联表查询Join
- Excel数据线性回归
- oracle 创建新的表空间,oracle创建表空间新建新用户并受权
- cesium添加天地图,从环境配置到加载天地图
- python数据分析与可视化答案学堂云_智慧树知到_Python数据分析与数据可视化_最新答案...
- Python开发【模块】:Urllib(二)