0

Ich möchte eine gespeicherte Prozedur mit optionalen Argument haben. Der Standardwert ist nullMsSql Server: Standard Bigint Argument in gespeicherten Prozedur

CREATE PROCEDURE [myStoredProcedure](@itemID bigint = NULL) 

Dann würde ich es zu benutzen, wie in COALESCE

COALESCE(@itemID, table.itemID) = table.itemID 

Ist dieser Ansatz richtig für optionales Argument? Funktioniert das für Oracle gleich?

+1

Aus Gründen der Leistung ist es besser, logische Trennung zu machen. Beispiel: IF (@itemID IS NULL) BEGIN-Anweisung 1 END ELSE BEGIN Anweisung2 END –

+0

Weitere Informationen hierzu finden Sie unter [Dynamische Suchbedingungen in T-SQL] (http://www.sommarskog.se/dyn-search-2008. html). [In einer früheren Antwort] (https://stackoverflow.com/a/18697104/1048425) Ich habe ein ausgearbeitetes Beispiel gemacht, das auf das eingeht, was Dmitrij über die Verwendung von "IF/EKSE" gesagt hat – GarethD

Antwort

2

Obwohl Sie COALESCE() verwenden können, denke ich explizite Vergleiche sind typisch:

where (t.itemId = @itemId or @itemId is null) 

Jede Methode in SQL Server oder Oracle arbeiten, da sowohl Standard-SQL sind. In Oracle-Parametern nicht mit @ beginnen und die Syntax für gespeicherte Prozeduren kann ganz anders aussehen.

Verwandte Themen