Oracle: Erhalte eine Abfrage, die immer genau eine Zeile zurückgibt, auch wenn keine Daten gefunden werden

7

Ich habe eine Abfrage wie folgt:

%Vor%

Normalerweise sollte diese Abfrage genau eine Zeile zurückgeben. Wenn für v_t_id keine Übereinstimmung gefunden wird, schlägt das Programm mit der Ausnahme "Keine Daten gefunden" fehl.

Ich weiß, dass ich das in PL / SQL handhaben kann, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, dies nur in einer Abfrage zu tun. Als Test habe ich es versucht:

%Vor%

... aber das wird natürlich nicht funktionieren (weil subq leer ist nicht das gleiche wie subq.data_name is null ). Ist das überhaupt möglich oder sollte ich einfach meine PL / SQL-Lösung einchecken?

(Orakel 10g)

    
FrustratedWithFormsDesigner 13.01.2011, 16:59
quelle

6 Antworten

18

Es gibt Wege, um das einfacher und sauberer zu machen, aber das im Grunde buchstabiert die Technik:

%Vor%

Wenn der erste Teil der Union leer ist, enthält der zweite Teil eine Zeile. Wenn der erste Teil nicht leer ist, enthält der zweite Teil keine Zeilen.

Wenn die Abfrage zu lange dauert, verwenden Sie diese:

%Vor%     
Cade Roux 13.01.2011, 17:18
quelle
9

Ich würde es vorziehen, die Ausnahme zu behandeln. Dies funktioniert jedoch wie angegeben:

%Vor%

Beachten Sie, dass dies auch "funktioniert", wenn die Abfrage more als 1 Zeile zurückgibt - d. h. TOO_MANY_ROWS wird nicht ausgelöst.

    
Tony Andrews 13.01.2011 17:06
quelle
1
%Vor%     
Conrad Frix 13.01.2011 17:13
quelle
1

Hier ist meine einfache Lösung mit LEFT OUTER JOIN:

%Vor%     
Félix Hernández 19.03.2015 15:05
quelle
0

Wenn Sie immer Null oder eine Zeile erwarten, können Sie eine Gruppenfunktion verwenden, z. B .:

%Vor%

Sie erhalten immer mindestens eine Zeile und einen Wert von NULL für den Fall, dass der Datensatz nicht gefunden wird.

    
tawman 13.01.2011 17:04
quelle
0

Ссылка Antwort ist nett, aber es gibt eine kürzere Lösung

%Vor%     
michael nesterenko 01.02.2012 09:51
quelle

Tags und Links