我有一个这样的查询...
SELECT 1,2,3
FROM (SELECT CASE WHEN something THEN TO_CHAR(1)... END,2,3
FROM tables WHERE condtions)
WHERE 1 NOT LIKE 'String'
所有列都是 varchar2,我在这个查询中得到一个 Invalid Number 错误,指向内部 case 语句。内部查询单独运行良好..如果我删除外部 WHERE 条件,整个查询运行良好。
我知道这与 SQL 优化器有关,但我在这里做错了什么,我该如何解决这个问题?对字符串或外部选择语句使用 To_CHAR 不起作用...
更新以获得更好的理解,
SELECT COL1, COL2, COL3 FROM (
SELECT CASE WHEN LOGIC THEN TO_CHAR(1) ELSE TO_CHAR(0) END AS COL1,
COUNT(SOME_COL) AS COL2 , COUNT(SOME_COL2) AS COL3 FROM TABLES WHERE CONDTIONS
) WHERE COL1 NOT LIKE ‘0’
我被告知 Oracle SQL Optimizer 正在干扰并导致上述错误,并且查询必须以不同的方式编写。