2017-03-27 10 views
1

IF文からデータを返すにはどうすればよいですか?私はそのステートメントの結果に応じて異なる結果を返すためのIFステートメントを持っています。データを返すときにOracleでIF文を使用する

IF :Value = 1 THEN 
SELECT Name FROM TABLE_A 
ELSEIF :Value = 2 THEN 
SELECT Name FROM TABLE_B 
ELSEIF :Value = 3 THEN 
SELECT Name FROM TABLE_C 

しかし、これは機能しません。これらの選択項目にはINTOステートメントが必要です。私はこれがオラクルがブロックから復帰できないためだと思う?

データを格納するか、関数を使いこなすためのテーブル変数を作成せずに、これらのselect文をすばやく返す方法はありますか?

+0

IFはplsql文で、 'select * ....'はsqlです。彼らは異なる言語です。 'execute immediate'を使ってSQL文をplsqlの中で実行する方法があります。しかし、やはり、実装しようとしている文脈や達成しようとしていることを知らずに、何かを提案することは非常に難しいです – Hawk

答えて

0

あなたは、プレーンSQLでこれを行うことができます。

SELECT 
    ':Value' user_input, 
    CASE 
    WHEN ':Value' IN('a1','a2','a3') 
    THEN (select name from table_a) 
    WHEN ':Value' = 'i' 
    THEN (select name from table_b) 
    END AS output 
FROM 
    dual 

good info about case

+0

ありがとう、選出者が複数の列を返すなら、 – Damien

+0

はい、 '出力として'の後に '、'を追加し、より多くの列を使用することができます。 – Ice

+0

@Ice Ah okですが、毎回個別のケースステートメントが必要です。 – Damien

0

を、あなたのケースでは、複数の結果をしたい場合は、あなたが知的UNIONに選ぶことができます:

SELECT t1_Col_1, t1_Col_2,'&VALUE' from TABLE_1 
    WHERE '&VALUE' = '1' 
UNION ALL 
    SELECT t2_Col_1, t2_Col_2,'&VALUE' from TABLE_2 
    WHERE '&VALUE' = '2' 

この解決方法では、tx_Colnの種類と番号が同じである必要があります。

+0

複数の回答を書く必要がある場合は、同じ回答にヘッダを追加して – saikumarm

関連する問題