一、故障现象反馈
开发人员反馈系统查询不显示数据,但是使用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.