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

jak vrátit dočasnou tabulku z funkce postgres?

Dočasný stůl

Odpověď na vaši otázku v nadpisu:
Jeden nemůže "vrátit dočasnou tabulku z funkce postgres". Dočasné tabulky jsou vytvořeny a automaticky viditelné pro stejného uživatele v rámci stejné relace. Jsou automaticky vypuštěny na konci relace (nebo dříve).

Tabulková funkce

Ale funkci vracení množin (neboli „tabulková funkce“) lze použít stejně jako tabulku:

CREATE OR REPLACE FUNCTION getresourceinfo(tablename regclass, opened_path int)
  RETURNS TABLE (pathid int, name varchar, pbs varchar
               , parentid varchar, resid int) AS
$func$ 
BEGIN

RETURN QUERY EXECUTE format(
  'SELECT t.pathid, t.name, t.pbs, t.parentid, t.resid
   FROM  ' || tablename || ' t
   WHERE  t.opened_path = $1'
   )
USING opened_path;

END
$func$ LANGUAGE plpgsql;

Mělo by to smysl pouze pro hromadu tabulek, které všechny sdílejí pevně zakódované názvy sloupců se stejným datovým typem.
Volání (stejně jako výběr z tabulky):

SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')

Proč datový typ regclass pro parametr tabulky?
Název tabulky jako parametr funkce PostgreSQL

Kurzor

Pro úplnost:Lze vrátit CURSOR , což by byl velmi podobný koncept, jaký požadujete. Podrobnosti v příručce zde.
Ale kurzory téměř nikdy nepoužívám. Tabulkové funkce jsou většinou praktičtější.




  1. Najděte nejmenší nepoužívané číslo v SQL Server

  2. Extrahujte den v týdnu z datového pole v PostgreSQL za předpokladu, že týdny začínají v pondělí

  3. Hostování MySQL v Azure, plně spravovaná cloudová databázová služba se spouští na ScaleGrid

  4. Postgres - odeberte prvek z pole jsonb