![]() |
1
3
假设您知道给定的ID范围将始终导致包含数字数据的字段1,您可以这样做:
|
![]() |
2
5
这是不好的做法。数字数据应保存在数字列中。原因很简单:如果不强制使用强数据类型,可能会发现varchar2列中有非数字数据。如果发生这种情况,那么像这样的过滤器
会失败
我不能肯定地说这就是您的场景中正在发生的事情,因为我不明白为什么ID过滤器中明显不重要的更改会改变查询的成功。查看查询的不同版本的执行计划将具有指导意义。但我认为这更可能是你的数据问题,而不是SGA中的一个bug。 |
![]() |
3
1
建议执行以下操作以确定是否有包含非数字数据的记录。正如其他人所说,执行计划和评估顺序的变化可以解释为什么错误不总是出现。 (假设sqlplus是客户机)
对于原始问题,另一种解决方法是重写查询以避免隐式类型转换,例如。
|
![]() |
4
0
考虑编写一个is_number pl/sql函数:
|