以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  sql查询表遭遇难题,部分限定条件无法查询到数据  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=11197)

--  作者:teng0731
--  发布时间:2011/7/12 22:26:00
--  sql查询表遭遇难题,部分限定条件无法查询到数据

sql查询表遭遇难题,部分限定条件无法查询到数据

同样一段sql代码,只是其中一个条件不一样,结果查询结果不一样:

图片点击可在新窗口打开查看
 
使用\'T\'作为条件,没有查询到结果
 
 
图片点击可在新窗口打开查看
 
更改一下条件
 
 
图片点击可在新窗口打开查看
 
结果就可以查询到数据:
 
 
图片点击可在新窗口打开查看
 
 
请狐爸看看是不是程序有问题。
补充,用pl/sql工具在oracle原数据库是可以查询到\'T\'的数据的。
[此贴子已经被作者于2011-7-12 22:26:59编辑过]

--  作者:mr725
--  发布时间:2011/7/12 22:54:00
--  
添加附件后,要点击“上传附件”,否则看不到添加的东东。。。。。
--  作者:狐狸爸爸
--  发布时间:2011/7/13 7:58:00
--  

楼主看下这个:

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=78&replyID=&skin=1

 


--  作者:teng0731
--  发布时间:2011/7/13 8:01:00
--  

补充说明,上面的问题由于是通过外部数据库ORACEL查询数据,就算是我将项目打包放到附件,也无法进行验证运行(链接不到外部数据库),所以我采取描述问题的方式:

通过进一步测试,如果是将sql语句精简,只针对有“T”的表进行查询,通过sql查询窗口,可以得到结果数据,如下,

 

图片点击可在新窗口打开查看
 
可以查询到结果
 
图片点击可在新窗口打开查看
 
上面查询用的完整语句是:
 
SELECT gcc.*
  FROM {APPS.gl_code_combinations }    gcc
 WHERE  GCC.SEGMENT1 = \'T\'
   and GCC.SEGMENT2 = \'T\'
   and GCC.SEGMENT4 = \'T\'
   and GCC.SEGMENT3 not in (1000, 2000, 5100, 5101, 5400, 5401,3000)
   and GCC.SEGMENT5 = \'T\'
   and GCC.SEGMENT6 = \'T\'
   and GCC.SEGMENT7 = \'T\'
 
查询不到结果的语句是:
SELECT hao.name 公司名称,
       hao.internal_address_line 公司代码,
       gb.period_name 期间名称,
       GCC.SEGMENT3 || \'  \' || j.description 科目,
       j.description 科目名称,
       GCC.SEGMENT3 科目代码,
       decode(j.structured_hierarchy_level, 8, \'一级科目\',5,\'二级科目\', 6,\'三级科目\', \'四级科目\') 科目级次,
       gb.begin_balance_dr - gb.begin_balance_cr 期初数,
       gb.period_net_dr 本期借方发生额,
       gb.period_net_cr 本期贷方发生额,
       gb.period_net_dr - gb.period_net_cr 本期净额,
       gb.begin_balance_dr - gb.begin_balance_cr +gb.period_net_dr-gb.period_net_cr 期末数
  FROM {APPS.gl_balances} gb,{APPS.gl_code_combinations}     gcc,{APPS.hr_all_organization_units} hao,{APPS.FND_FLEX_VALUES_VL} J
 WHERE GCC.CODE_COMBINATION_ID = GB.CODE_COMBINATION_ID
   and gcc.segment3 = j.flex_value
   and j.Flex_Value_Set_Id = \'1007062\'
   AND GCC.SEGMENT1 = \'T\'
   and GCC.SEGMENT2 = \'T\'
   and gcc.segment1 = hao.internal_address_line
   and hao.name like \'OU%\'
   and GCC.SEGMENT4 = \'T\'
   and GCC.SEGMENT3 not in (1000, 2000, 5100, 5101, 5400, 5401,3000)
   and GCC.SEGMENT5 = \'T\'
   and GCC.SEGMENT6 = \'T\'
   and GCC.SEGMENT7 = \'T\'
   and gb.actual_flag = \'A\'
   and gb.period_name = \'JUN-11\'
ORDER BY 2,6
 
 
如果将上面查询不到结果的语句换成:
SELECT hao.name 公司名称,
       hao.internal_address_line 公司代码,
       gb.period_name 期间名称,
       GCC.SEGMENT3 || \'  \' || j.description 科目,
       j.description 科目名称,
       GCC.SEGMENT3 科目代码,
       decode(j.structured_hierarchy_level, 8, \'一级科目\',5,\'二级科目\', 6,\'三级科目\', \'四级科目\') 科目级次,
       gb.begin_balance_dr - gb.begin_balance_cr 期初数,
       gb.period_net_dr 本期借方发生额,
       gb.period_net_cr 本期贷方发生额,
       gb.period_net_dr - gb.period_net_cr 本期净额,
       gb.begin_balance_dr - gb.begin_balance_cr +gb.period_net_dr-gb.period_net_cr 期末数
  FROM {APPS.gl_balances} gb,{APPS.gl_code_combinations}     gcc,{APPS.hr_all_organization_units} hao,{APPS.FND_FLEX_VALUES_VL} J
 WHERE GCC.CODE_COMBINATION_ID = GB.CODE_COMBINATION_ID
   and gcc.segment3 = j.flex_value
   and j.Flex_Value_Set_Id = \'1007062\'
   AND GCC.SEGMENT1 = \'3610\'
   and GCC.SEGMENT2 = \'T\'
   and gcc.segment1 = hao.internal_address_line
   and hao.name like \'OU%\'
   and GCC.SEGMENT4 = \'T\'
   and GCC.SEGMENT3 not in (1000, 2000, 5100, 5101, 5400, 5401,3000)
   and GCC.SEGMENT5 = \'T\'
   and GCC.SEGMENT6 = \'T\'
   and GCC.SEGMENT7 = \'T\'
   and gb.actual_flag = \'A\'
   and gb.period_name = \'JUN-11\'
ORDER BY 2,6
又可以查询到想要的结果,真的不知道具体的原因。
 
上面两段语句如果通过pl/sql查询,都可以查询到想要的结果。

--  作者:teng0731
--  发布时间:2011/7/13 8:13:00
--  

不好意思,没有考虑到你们看到的图会挂掉,我自己浏览可以,按照要求通过附件上传上了。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:sql查询表遭遇难题.zip

 

--------大家不用费力了,我估计我找到原因了,等一下补充。

[此贴子已经被作者于2011-7-13 8:37:58编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/13 8:50:00
--  

这是微软和甲骨文打架吧?

换甲骨文自家的数据访问组件看看:

 

http://www.oracle.com/technetwork/cn/database/windows/downloads/index-101312-zhs.html

 

 

或者你还是保留条件:

 

GCC.SEGMENT1 = \'T\'

 

逐个删除其他条件看看。


--  作者:teng0731
--  发布时间:2011/7/13 9:02:00
--  

呵呵,狐爸还真幽默,原因找到了,首先我要道歉,应用的sql语句出现问题,同样的查询我有两段语句,上面的语句居然有问题,而我平时用的语句固定到了程序中,找到正确的sql语句后,再重新测试通过,正确语句如下:

SELECT j1.description 公司名称,
       gcc.segment1 公司代码,
       gb.period_name 期间名称,
       GCC.SEGMENT3 || \'  \' || j.description 科目,
       j.description 科目名称,
       GCC.SEGMENT3 科目代码,
       decode(j.structured_hierarchy_level,
              8,
              \'一级科目\',
              5,
              \'二级科目\',
              6,
              \'三级科目\',
              \'四级科目\') 科目级次,
       gb.begin_balance_dr - gb.begin_balance_cr 期初数,
       gb.period_net_dr 本期借方发生额,
       gb.period_net_cr 本期贷方发生额,
       gb.period_net_dr - gb.period_net_cr 本期净额,
       gb.begin_balance_dr - gb.begin_balance_cr + gb.period_net_dr -
       gb.period_net_cr 期末数
  FROM APPS.gl_balances          gb,
       APPS.gl_code_combinations gcc,
       APPS.FND_FLEX_VALUES_VL   J,
       apps.FND_FLEX_VALUES_VL   J1
 WHERE GCC.CODE_COMBINATION_ID = GB.CODE_COMBINATION_ID
   and gcc.segment3 = j.flex_value
   and gcc.segment1 = j1.flex_value
   and j.Flex_Value_Set_Id = \'1007062\'
   and j1.Flex_Value_Set_Id = \'1007060\'
   and GCC.SEGMENT2 = \'T\'
   and GCC.SEGMENT4 = \'T\'
   and GCC.SEGMENT3 not in (1000, 2000, 5100, 5101, 5400, 5401, 3000)
   and GCC.SEGMENT5 = \'T\'
   and GCC.SEGMENT6 = \'T\'
   and GCC.SEGMENT7 = \'T\'
   and gb.actual_flag = \'A\'
    and GCC.SEGMENT1= \'T\'
    and gb.period_name=\'JUN-11\'
 order by 6

 

明天有时间,看看两段语句的差别,为什么会造成上面查询不到数据的错误。

[此贴子已经被作者于2011-7-13 9:06:32编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/13 9:27:00
--  

呵呵,恭喜,其实我也稀里糊涂的。