我有一些问题,用下面的语句:解码声明:奇怪的行为
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,所以任何其他行为看起来像一个错误。 (除非你将查询和结果顺序混淆在一起......) –