Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich mehrere Werte mithilfe eines einzelnen Parameters an eine PostgreSQL-Funktion?
Diese Anleitung zeigt, wie Sie mithilfe eines einzigen Parameters effizient mehrere Werte an eine PostgreSQL-Funktion übergeben können. Dabei liegt der Schwerpunkt auf dem Typ VARIADIC
und bietet Optimierungsstrategien.
VARIADIC
ParametersDer VARIADIC
-Typ von PostgreSQL bietet eine übersichtliche Lösung für die Verarbeitung mehrerer Eingabewerte innerhalb eines einzelnen Parameters. Lassen Sie uns eine Beispielfunktion anpassen:
<code class="language-sql">CREATE OR REPLACE FUNCTION test(VARIADIC int[]) RETURNS TABLE (job_id int, job_reference int, job_job_title text, job_status text) AS $$ BEGIN RETURN QUERY SELECT j.id, j.reference, j.job_title, ltrim(right(j.status, -2)) AS status -- Optimized string trimming FROM jobs j JOIN company c ON j.id = c.id WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND (j.id = ANY() OR '{<b>-1</b>}'::int[] = ) ORDER BY j.job_title; END; $$ LANGUAGE plpgsql;</code>
Diese überarbeitete Funktion akzeptiert ein ganzzahliges Array (int[]
) als Eingabe. Das Schlüsselwort VARIADIC
ermöglicht der Funktion, eine variable Anzahl ganzzahliger Argumente zu akzeptieren und diese automatisch in ein Array umzuwandeln.
VARIADIC
Die Funktion kann direkt über ein Array aufgerufen werden:
<code class="language-sql">SELECT * FROM test(<b>VARIADIC</b> '{1, 2, 3}'::int[]);</code>
Dies entspricht funktional:
<code class="language-sql">SELECT * FROM test(1, 2, 3);</code>
Effizientes String-Trimmen: Für PostgreSQL 9.1 und höher bietet die Verwendung von right()
mit einer negativen Länge (right(j.status, -2)
) im Vergleich zu substring()
eine schnellere und sauberere Methode zum Entfernen führender Zeichen.
Überlegungen zum Datentyp: Wenn DeleteFlag
boolesche Werte darstellt, ist die Verwendung des Datentyps boolean
effizienter und semantisch korrekter als text
. Vermeiden Sie unnötige doppelte Anführungszeichen um Spaltennamen in WHERE
-Klauseln.
Für eine bessere Lesbarkeit und potenzielle Leistungssteigerungen sollten Sie eine reine SQL-Implementierung in Betracht ziehen:
<code class="language-sql">CREATE OR REPLACE FUNCTION f_test(VARIADIC int[]) RETURNS TABLE (id int, reference int, job_title text, status text) AS $func$ SELECT j.id, j.reference, j.job_title , ltrim(right(j.status, -2)) AS status FROM job j JOIN company c ON j.id = c.id WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND (j.id = ANY() OR '{-1}'::int[] = ) ORDER BY j.job_title $func$ LANGUAGE sql;</code>
Diese vereinfachte Version erreicht die gleiche Funktionalität mit verbesserter Prägnanz. Denken Sie daran, die Tabellen- und Spaltennamen an Ihr spezifisches Schema anzupassen.
Das obige ist der detaillierte Inhalt vonWie übergebe ich mehrere Werte mithilfe eines einzelnen Parameters an eine PostgreSQL-Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!