Hallo zusammen,
ich bin Oracle-Einsteiger und beschäftige mich gerade, meines Erachtens nach,
mit einem absoluten Standardproblem - deswegen wohl auch Einsteiger...
Zur Erläuterung:
ich habe eine PL-SQL-Funktion, welche mehrere Parameter übergeben bekommt.
Anschließend werden diese Parametern in eine WHERE-Bedinung eingefügt.
Jeder Parameter kann den Wert NULL annehmen.
Das ganze sieht in etwa so aus:
Das Problem ist die Bedingung in Verbindung mit NULL-Werten. Ist bspw. p1 := NULL, so müsste das Statement
wie folgt geändert werden:
Füge ich IF-Bedinungen mit der Überprüfung auf NULL ein, so habe ich bei der Anzahl
von Parametern schnell einen unübersichtlichen und schlecht wartbaren Code.
Bei meiner Recherche bin ich auf zwei Möglichkeiten gestoßen, dieses Problem zu lösen:
a) dyn. einen String erzeugen und diesen mittels EXECUTE IMMEDIATE ausführen.
b) Den Standardwert der Spalten von NULL auf 0 setzen und mit NVL arbeiten. Das würde dann so aussehen
Gibt es eine bessere Möglichkeit das ganze zu realisieren? Ich bin dankbar für jeden Hinweis und Hilfe.
Viele Grüße aus Hamburg
ich bin Oracle-Einsteiger und beschäftige mich gerade, meines Erachtens nach,
mit einem absoluten Standardproblem - deswegen wohl auch Einsteiger...
Zur Erläuterung:
ich habe eine PL-SQL-Funktion, welche mehrere Parameter übergeben bekommt.
Anschließend werden diese Parametern in eine WHERE-Bedinung eingefügt.
Jeder Parameter kann den Wert NULL annehmen.
Das ganze sieht in etwa so aus:
Code:
create or replace function f_insert (p1 number, p2 number, p3 varchar2) return number is output number; begin select table_row_id into output from table where column1 = p1 and column2 = p2 [...] return output; end f_insert;
wie folgt geändert werden:
Code:
[...] where column1 IS NULL [...]
von Parametern schnell einen unübersichtlichen und schlecht wartbaren Code.
Bei meiner Recherche bin ich auf zwei Möglichkeiten gestoßen, dieses Problem zu lösen:
a) dyn. einen String erzeugen und diesen mittels EXECUTE IMMEDIATE ausführen.
b) Den Standardwert der Spalten von NULL auf 0 setzen und mit NVL arbeiten. Das würde dann so aussehen
Code:
[...] where column1 = NVL(p1, 0) [...]
Viele Grüße aus Hamburg
Comment