0

私は次のような句を持っていますDECODEWHERE

Where id = decode('&flag','Yes',(Select id from tab where id > 10),0)

このコードは、サブクエリが 1 つの投稿を返す場合に機能します。複数を返すと、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))

言及したように、これは、select statmen が複数ではなく行で返される場合に機能します。

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 に答える