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

Funkce Postgres vrací tabulku, která nevrací data ve sloupcích

Chcete-li místo typu řádku získat jednotlivé sloupce, zavolejte funkci pomocí:

SELECT * FROM testfunction();

Stejně jako byste vybrali všechny sloupce z tabulky.
Zvažte také tuto zkontrolovanou formu vaší testovací funkce:

CREATE OR REPLACE FUNCTION testfunction()
  RETURNS TABLE(a int, b int)
  LANGUAGE plpgsql AS
$func$
DECLARE
   _a int := 0;
   _b int := 0;
BEGIN
   CREATE TABLE tempTable AS SELECT _a, _b;
   RETURN QUERY SELECT * FROM tempTable;
   DROP TABLE tempTable;
END
$func$;

Konkrétně:

DECLARE klíčové slovo je potřeba pouze jednou.

Vyhněte se deklarování parametrů, které jsou již (implicitně) deklarovány jako OUT parametry v RETURNS TABLE (...) doložka.

V Postgresu nepoužívejte identifikátory případu CaMeL bez uvozovek. Funguje to, identifikátory bez uvozovek jsou přetypovány na malá písmena, ale může to vést k matoucím chybám. Viz:

  • Rozlišují se v názvech sloupců PostgreSQL velká a malá písmena?

Dočasná tabulka v příkladu je zcela zbytečná (pravděpodobně příliš zjednodušená). Uvedený příklad se scvrkává na:

CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
  LANGUAGE plpgsql AS
$func$
BEGIN
   a := 0;
   b := 0;
END
$func$;


  1. O výhodách tříděných cest

  2. Jak zálohovat databáze MySQL pomocí AutoMySQLBackup

  3. Jak vytvořit histogram v PostgreSQL

  4. Naplnění Teradata realistickými testovacími daty De Novo