sql >> Databáze >  >> RDS >> PostgreSQL

Vrátit dotaz z funkce?

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;

Zavolejte takto:

SELECT * FROM get_names('name')

Hlavní body:

  • Použijte RETURNS TABLE , takže nemusíte při každém volání poskytovat seznam názvů sloupců.

  • Použijte RETURN QUERY , mnohem jednodušší.

  • Názvy sloupců kvalifikujte podle tabulky, abyste se vyhnuli konfliktům názvů s identicky pojmenovanými OUT parametry (včetně sloupců deklarovaných pomocí RETURNS TABLE ).

  • Místo ALIAS použijte pojmenovanou proměnnou . Jednodušší, dělá to totéž a je to preferovaný způsob.

  • Jednoduchá funkce, jako je tato, může být také napsána v 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. mysqli:může připravit více dotazů v jednom příkazu?

  2. Deset tipů, jak začít s PostgreSQL

  3. Aktualizace profilu pošty databáze (SSMS)

  4. SQL Server:Rozdíl mezi PARTITION BY a GROUP BY