Tilføj funktionsparameter til SQL-forespørgsel WHERE-sætning
Hvis du ikke altid består alle parametre, skal du oprette en funktion med parameterstandarder . Den grundlæggende, simple form ville være en SQL-funktion uden dynamisk SQL:
CREATE OR REPLACE FUNCTION func(_a int = NULL
, _b text = NULL
, _c text = NULL)
RETURNS TABLE(...) AS
$func$
SELECT ... FROM ...
WHERE (speed = $1 OR $1 IS NULL)
AND (stop = $2 OR $2 IS NULL)
...
$func$ LANGUAGE sql;
Nu kan du kalde funktionen med et vilkårligt antal parametre ved hjælp af navngivet notation:
SELECT * FROM func(_c => 'foo', _a => 123); -- no _b, which defaults to NULL
Bemærk, opgaveoperatøren i opkaldet er =>
(eller :=
for Postgres 9.4 eller ældre), ikke =
!
Se:
- Den glemte opgaveoperatør "=" og den almindelige ":="
- Funktioner med variabelt antal inputparametre
Bortset fra:"streng" er ikke en datatype, text
er.
Meget mere er muligt med dynamisk SQL med EXECUTE
i en plpgsql-funktion .
Mere omfattende svar på SO med komplette opskrifter:
- Test for er null eller =værdi i funktion