我的DECODE
条款中有WHERE
,如下所示:
Where id = decode('&flag','Yes',(Select id from tab where id > 10),0)
如果子查询返回一个帖子,则此代码有效。如果我返回几个,我得到一个错误,如ORA-01427,“单行子查询返回多行”
我试图将'='更改为'in',但我仍然遇到同样的错误!
有什么想法吗?
扩展示例:
WHERE Dop_id = (DECODE ('&prep_flag', 'Yes',
(SELECT Dop_id FROM
( SELECT DOP_id, name FROM TABLE)
WHERE name IS NOT NULL)
, Dop_id))
如前所述,如果选择的统计数据在行上返回,而不是几个。
答案 0 :(得分:2)
假设解码只是期望你有Select id from tab where id > 10
的单个值,我会尝试在解码之外移动选择:
WHERE id IN (
SELECT decode('&flag', 'Yes', id, 0)
FROM tab
WHERE id > 10
)
答案 1 :(得分:0)
WHERE Dop_id IN
( CASE &flag
WHEN 'Yes'
THEN (SELECT Dop_id
FROM TABLE
WHERE name IS NOT NULL)
ELSE Dop_id);