2017-03-27 1 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'을 사용하여 plsql에서 SQL 문을 실행하는 방법이 있습니다. 그러나 구현하려는 컨텍스트 또는 달성하려는 내용을 모르는 상태에서 다시 제안 할 사항이 없습니다. – 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

감사합니다. 선출자가 1 개 이상의 열을 반환한다면이 방법이 유용할까요? – Damien

+0

예,'출력으로'뒤에','를 추가하면 더 많은 열을 사용할 수 있습니다. – Ice

+0

@Ice 아 좋아,하지만 매번 별도의 성명서가 필요합니다. – 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