顯然還有別的事情上。 WHERE子句在SELECT(列表列表)子句之前被評估,它不可能產生無限循環。
考慮(10.2.0.1):
SQL> CREATE TABLE employee AS
2 SELECT 1 empId, 'e1' empName, 1 empAge, 10 empExp, 'A' empDept FROM dual
3 UNION ALL SELECT 2, 'e2', 2, 9, 'B' FROM dual
4 UNION ALL SELECT 3, 'e3', 3, 8, 'C' FROM dual
5 UNION ALL SELECT 4, 'e4', 4, 7, 'D' FROM dual
6 UNION ALL SELECT 5, 'e5', 5, 6, 'E' FROM dual
7 UNION ALL SELECT 6, 'e6', 6, 5, 'F' FROM dual;
Table created
SQL> select empId,empName,
2 (case when empDept in ('A','B','C') then to_char(empAge)
3 when empDept in ('E','F','G') then to_char(empExp)
4 else 'Dept-Not found' end)
5 from employee where empDept in ('A','B','C','D','E','F','G');
EMPID EMPNAME (CASEWHENEMPDEPTIN('A','B','C'
---------- ------- ----------------------------------------
1 e1 1
2 e2 2
3 e3 3
4 e4 Dept-Not found
5 e5 6
6 e6 5
正如你可以在我的例子中看到的,我不得不一個to_char
添加到您的CASE表達式,因爲從一個情況下,所有的結果必須有相同的類型。沒有to_char
,就我而言,我獲得了ORA-00932。當查詢返回錯誤時,您的工具可能會掛起?
SQL不會執行「無限循環」,所以在這裏實際發生了什麼?您缺少CASE表達式的END關鍵字,這意味着SQL將無法正常工作。 – 2011-03-03 09:29:28
即使結束我也面臨同樣的問題 – Harish 2011-03-03 09:49:42
什麼讓你覺得有一些無限循環?你如何運行查詢?員工表有多大? – 2011-03-03 10:11:44