Java >> Java tutorial >  >> Tag >> SQL

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

Java tag