Heim >Datenbank >MySQL-Tutorial >Wie kann ich in einer PostgreSQL-Funktion mehrere Werte an einen einzelnen Parameter übergeben?
Einzelparameter-Mehrwertübergabe der PostgreSQL-Funktion
PostgreSQL bietet eine praktische Möglichkeit, mehrere Werte mit einem einzigen Parameter an eine Funktion zu übergeben, was durch die Verwendung des Parameters VARIADIC erreicht werden kann.
Die Syntax des VARIADIC-Parameters lautet wie folgt:
<code class="language-sql">CREATE OR REPLACE FUNCTION 函数名(VARIADIC 参数数据类型)</code>
Wobei VARIADIC
angibt, dass der Parameter mehrere Werte annehmen kann. 参数数据类型
Gibt den Datentyp des Werts an, der übergeben wird.
Die folgenden Funktionen akzeptieren mehrere ganzzahlige Werte:
<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 * FROM jobs WHERE job_id = ANY() ORDER BY job_job_title; END; $$ LANGUAGE plpgsql;</code>
Diese Funktion kann aufgerufen werden, indem mehrere durch Kommas getrennte Ganzzahlwerte übergeben werden:
<code class="language-sql">SELECT * FROM test(270, 378);</code>
In PostgreSQL 9.1 oder höher können Sie VARIADIC-Parameterfunktionen auch direkt über Array-Typen aufrufen. Der folgende Code entspricht dem vorherigen Beispiel:
<code class="language-sql">SELECT * FROM test(VARIADIC '{1, 2, 3}'::int[]);</code>
right()
, um Zeichen am Anfang der Zeichenfolge zu entfernen, was schneller ist als die Verwendung der Funktion substring()
. "DeleteFlag"
. text
. Unter Anwendung der oben genannten Optimierungen ist hier eine verbesserte Version der Originalfunktion:
<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 id, reference, job_title, ltrim(right(status, -2)) AS status FROM company c JOIN job j USING (id) WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND id = ANY() ORDER BY job_title; $func$ LANGUAGE sql;</code>
Das obige ist der detaillierte Inhalt vonWie kann ich in einer PostgreSQL-Funktion mehrere Werte an einen einzelnen Parameter übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!