sql >> Database >  >> RDS >> PostgreSQL

Retourneer een query van een functie?

CREATE OR REPLACE FUNCTION get_names(_tname varchar)
  RETURNS TABLE (col_a integer, col_b text) AS
$func$
BEGIN
   RETURN QUERY
   SELECT t.col_a, t.col_b  -- must match RETURNS TABLE
   FROM   mytable t
   WHERE  t.name = _tname;    
END
$func$  LANGUAGE plpgsql;

Bel als volgt:

SELECT * FROM get_names('name')

Belangrijkste punten:

  • Gebruik RETURNS TABLE , zodat u niet bij elke oproep een lijst met kolomnamen hoeft op te geven.

  • Gebruik RETURN QUERY , veel eenvoudiger.

  • Tabel-kwalificeer kolomnamen om naamgevingsconflicten te voorkomen met gelijknamige OUT parameters (inclusief kolommen gedeclareerd met RETURNS TABLE ).

  • Gebruik een benoemde variabele in plaats van ALIAS . Eenvoudiger, hetzelfde doen, en het is de voorkeursmanier.

  • Een simpele functie als deze kan ook geschreven worden in LANGUAGE sql :

CREATE OR REPLACE FUNCTION get_names(_tname varchar)
  RETURNS TABLE (col_a integer, col_b text) AS
$func$
SELECT t.col_a, t.col_b  --, more columns - must match RETURNS above
FROM   mytable t
WHERE  t.name = $1;
$func$ LANGUAGE sql;



  1. ADDTIME() Voorbeelden – MySQL

  2. Omzet berekenen in MySQL

  3. Een PostgreSQL-query exporteren naar een csv-bestand met Python

  4. Hoe u uw waarde als DBA kunt verwoorden voor Finance Executives