3

我有两个查询ORA-01722: invalid number在尝试转换CHARNUMBER.

SELECT to_number('NYC TERM') FROM dual;

WITH
  x AS (SELECT 'NYC TERM' AS col FROM dual
          UNION
        SELECT '33' FROM dual)
SELECT *
  FROM X
 ORDER BY to_number(col);

如果我删除查询中的第二个SELECT工作UNION正常。为什么它的行为不同?

问题是,当我作为一个整体运行查询返回其他行时,它会给出错误,但是当我只针对具有此类数据的特定记录运行时,它会正常运行。

 WITH
   x AS (SELECT 'NYC TERM' AS col FROM dual)
 SELECT * FROM X ORDER BY to_number(col);
4

1 回答 1

3

这是一个有点长的评论。

order by我认为正在发生的事情是甲骨文出于性能原因正在短路。只有一行,根本不需要排序,所以即使是键也不会被评估。在这个荒谬的例子中可能更清楚地看到了这一点:

 WITH x AS (SELECT 'NYT TERM' AS col FROM DUAL)
 SELECT * FROM X ORDER BY length(col) / 0;

这将返回一行一列,'NYT TERM'。没有错误。

我想这被认为是一个“功能”。

于 2015-10-16T23:15:45.543 回答