Heim >Datenbank >MySQL-Tutorial >Wie kann ich in einer PostgreSQL-Funktion mehrere Werte an einen einzelnen Parameter übergeben?

Wie kann ich in einer PostgreSQL-Funktion mehrere Werte an einen einzelnen Parameter übergeben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-10 08:11:41229Durchsuche

How Can I Pass Multiple Values to a Single Parameter in a PostgreSQL Function?

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.

VARIADIC-Parametersyntax

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.

Beispiel für die Übergabe mehrerer Werte

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>

Alternative Syntax für die Verwendung von Arrays

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>

Weitere Vorschläge zur Leistungsoptimierung

  • Verwenden Sie das negative Argument der Funktion right(), um Zeichen am Anfang der Zeichenfolge zu entfernen, was schneller ist als die Verwendung der Funktion substring().
  • Vermeiden Sie die Verwendung doppelter Anführungszeichen um Spaltennamen, wie z. B. "DeleteFlag".
  • Verwenden Sie einen geeigneten booleschen Datentyp zur Darstellung des Flags und keinen Zeichendatentyp wie text.

Optimierte Funktion

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn