免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1280 | 回复: 4
打印 上一主题 下一主题

请教一个很奇怪的问题(IN子句) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-09-08 10:41 |只看该作者 |倒序浏览
有这么一个查询语句:
SELECT COUNT (*)
  FROM A
WHERE roleid IN (SELECT pvalue
                                            FROM B
                                           WHERE pname = 'test')
在B表中pvalue的字段类型是varchar2(100)
在A表中roleid的字段类型是number
这个语句以前都可以运行,数据库会自动将varchar2类型的字段pvalue转换成number类型,可是最近该语句不能运行,提示一个非法数字(ora-1722),如果将'in'换成'='语句运行没有问题,现在是子查询有可能查询出多个记录的。
各位有没有碰到过类似的情况,为什么会是这样,怎么解决?

论坛徽章:
0
2 [报告]
发表于 2005-09-08 10:52 |只看该作者

请教一个很奇怪的问题(IN子句)

SELECT COUNT (*)
FROM A , (SELECT /*+no_merge */pvalue
                                           FROM B
                                          WHERE pname = 'test')  B
WHERE roleid  = b.pvalue

论坛徽章:
0
3 [报告]
发表于 2005-09-08 10:54 |只看该作者

请教一个很奇怪的问题(IN子句)

to_number

论坛徽章:
0
4 [报告]
发表于 2005-09-08 11:07 |只看该作者

请教一个很奇怪的问题(IN子句)

我做了一个测试,如果分析表A后,这个语句就不能使用了,必须使用to_number或to_char函数转换一下,或将语句改成上述的语法。
问题是现在系统中有很多这种语句,我需要一个解释的原因才能通知他们进行改动。

论坛徽章:
0
5 [报告]
发表于 2005-09-08 14:56 |只看该作者

请教一个很奇怪的问题(IN子句)

在表B中的pvalue字段不仅有纯数字的数据,还有不是数字的数据,但是where 条件中选中的数据是纯数据的数据,在把A,B表的统计信息删除后,这个语句运行没有问题,可是一旦对A,B表进行分析后,语句就不能使用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP