0

我的条款DECODEWHERE有这样的:

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))

如前所述,如果选择状态返回行,而不是几个,则此方法有效。

4

2 回答 2

2

假设解码只需要一个值,Select id from tab where id > 10我会尝试将选择移到解码之外:

WHERE id IN (
    SELECT decode('&flag', 'Yes', id, 0)
    FROM tab
    WHERE id > 10
)
于 2012-10-16T22:57:31.923 回答
0
WHERE Dop_id IN 
      ( CASE &flag
        WHEN 'Yes'
        THEN (SELECT Dop_id 
                FROM TABLE
               WHERE name IS NOT NULL)
        ELSE Dop_id);
于 2012-10-17T02:44:38.527 回答