2017-05-04 4 views
0

ich nächste Abfrage zu tun versuche:Ist es möglich, in von Klausel Gebrauch Fall, wenn Anweisung

select * from (case when :p1 = '1' then t1 when :p1=2 then t2); 

Aber es funktioniert nicht. Ich nehme diesen Fall an, wenn die Aussage in der Klausel from nicht erlaubt ist? Gibt es irgendeinen anderen Weg, dies zu lösen? Danke

+0

Angenommen, Sie versuchen, einen Tabellennamen zu verwenden, der bedingt sein sollte, richtig? Nun PL/SQL ist eine Option oder Sie können auch eine Funktion erstellen. – user75ponic

+0

@ user75ponic True, Tabellenname ist optional. Wenn der Parameter gleich 1 ist, dann werden Daten von t1 gesammelt, wenn der Parameter gleich 2 ist, und dann werden Daten von t2 gesammelt. Kann mir das helfen? – Savke

+0

Verwenden Sie einen PL/SQL-Block oder erstellen Sie eine Funktion, um zu überprüfen, ob der Parameter 1 oder 2 ist. – user75ponic

Antwort

2

Nein, das geht nicht. Die Objekte und Bezeichner müssen beim Analysieren der Abfrage korrigiert werden, sodass Sie diese nicht binden können.

Sie könnten eine Vereinigung mit einem Scheck für die Variable in jedem Zweig verwenden:

select * from t1 
where :p1 = 1 
union all 
select * from t2 
where :p1 = 2; 

die Struktur der Tabellen unter der Annahme gleich sind.

+0

Ja, die Struktur der Tabellen ist identisch. Vielen Dank :) – Savke

Verwandte Themen