0

我在运行一个程序时遇到了一个奇怪的问题。

Proc 如下所示:

procedure abc 
IS 
CURSOR xyz_cur IS
 SELECT x
       ,y
       ,z 
 from temp 
  where y IN ('abc'.'pqr'.'def','sql','pqw') 
for update nowait;
BEGIN

open xyz_cur ;
:
:

END abc;

现在更早的游标查询没有'sql','pqw'。我已经用这两个varchar值扩展了这个IN语句。表temp在y列上有一个检查约束,我也扩展了检查约束。

现在我该如何解决我的问题,如果没有我最近添加的两个值,它可以很好地工作。

我已经尝试过,我已经分析了表格并重建了索引,但仍然没有运气。请帮助我

4

2 回答 2

5

ORA-600 表示“内部错误”,至少在理论上,您永远不会看到。

在第一种情况下,我建议重新启动您的数据库。

如果之后问题仍然存在,我会联系 Oracle 支持。

于 2012-10-02T09:00:13.787 回答
3

Metalink 提到了与 SELECT.. FOR UPDATE 相关的几个问题,导致 ORA-00600 [13009],尽管似乎没有一个完全适合您的问题(您不使用 10g 或更早版本,并且您没有树查询) - 我会建议联系 Oracle 支持。

您可以尝试的可能解决方法:

  • 在游标定义中使用 UNION ALL(每个 y 值都有一个分支)
  • 如果你有一组有限的 y 值:用 y not IN 反转你的逻辑......
于 2012-10-02T09:00:34.510 回答