Ich schreibe eine gespeicherte Prozedur, die eine Menge Konditionierung darin haben muss. Mit dem allgemeinen Wissen aus der C# .NET-Programmierung, dass Ausnahmen die Leistung beeinträchtigen können, habe ich es immer vermieden, sie auch in PL/SQL zu verwenden. Meine Anlage in diesem gespeicherte Prozedur dreht sich meist um, ob ein Datensatz vorhanden ist, was ich eine von zwei Arten tun könnte:Oracle PL/SQL - Sind NO_DATA_FOUND-Exceptions für die Performance der Stored Procedure fehlerhaft?
SELECT COUNT(*) INTO var WHERE condition;
IF var > 0 THEN
SELECT NEEDED_FIELD INTO otherVar WHERE condition;
....
-oder
SELECT NEEDED_FIELD INTO var WHERE condition;
EXCEPTION
WHEN NO_DATA_FOUND
....
Der zweite Fall scheint ein bisschen eleganter für mich, denn dann kann ich NEEDED_FIELD verwenden, was ich in der ersten Anweisung nach der Bedingung im ersten Fall hätte auswählen müssen. Weniger Code Aber wenn die gespeicherte Prozedur schneller mit COUNT (*) ausgeführt wird, dann habe ich nichts dagegen, etwas mehr einzugeben, um die Verarbeitungsgeschwindigkeit zu erhöhen.
Irgendwelche Hinweise? Vermisse ich eine andere Möglichkeit?
EDIT Ich hätte erwähnen sollen, dass dies alles bereits in einem FOR LOOP verschachtelt ist. Ich bin mir nicht sicher, ob das bei der Verwendung eines Cursors einen Unterschied macht, da ich glaube, dass ich den Cursor nicht als Auswahl in FOR LOOP deklarieren kann.
Danke, Steve. Siehe meine Bearbeitung oben. Macht das einen Unterschied? –
Oh, duh! Natürlich würde es funktionieren. OK, brauche mehr Kaffee. Vielen Dank. –