我有一些問題,用下面的語句:解碼聲明:奇怪的行爲
SELECT 1
FROM dual
WHERE DECODE(1,
0,
(SELECT COUNT(*) from tbl),
1) > 0
如果「TBL」是空的,這個查詢的執行以某種方式返回任何內容。
在另一方面,執行查詢:
SELECT 1
FROM dual
WHERE DECODE(1,
0,
(SELECT COUNT(*) from tbl),
1) = 1
返回1
而且,這樣的:
SELECT 1
FROM dual
WHERE DECODE(1,
0,
(SELECT COUNT(*) from tbl),
1) = 0
也返回1。我在想什麼?
編輯1 sqlplus的上市
SQL> select count(*) from ids;
COUNT(*)
----------
0
SQL> SELECT 1
2 FROM dual
3 WHERE DECODE(1,
4 0,
5 (SELECT COUNT(*) from ids),
6 1) > 0;
no rows selected
SQL> SELECT 1
2 FROM dual
3 WHERE DECODE(1,
4 0,
5 (SELECT COUNT(*) from ids),
6 1) =1;
1
----------
1
SQL> SELECT 1
2 FROM dual
3 WHERE DECODE(1,
4 0,
5 (SELECT COUNT(*) from ids),
6 1) =0;
1
----------
1
你看到哪個版本的行爲?無論11.2.0.3中'tbl'中有多少行,我分別得到1,1行和無行。 –
感謝您的快速回復。我的Oracle版本是11.2.0.4 –
'SELECT DECODE(1,0,(SELECT COUNT(*)from tbl),1)FROM DUAL'根據'tbl'中的行數給出不同的結果嗎?它顯然總是返回1,所以任何其他行爲看起來像一個錯誤。 (除非你將查詢和結果順序混淆在一起......) –