sql >> Databasteknik >  >> RDS >> PostgreSQL

hur man returnerar temp tabell från postgres funktion?

Tillfälligt bord

För att svara på din fråga i rubriken:
En kan inte "retur en temp tabell från postgres funktion". Tillfälliga tabeller skapas och automatiskt synlig för samma användare inom samma session. De tas bort automatiskt i slutet av sessionen (eller tidigare).

Tabellfunktion

Men en set-returnerande funktion (a.k.a. "tabellfunktion") kan användas precis som en tabell:

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;

Skulle bara vara vettigt för ett gäng tabeller som alla delar de hårdkodade kolumnnamnen med samma datatyp.
Ring (precis som att välja från en tabell):

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

Varför datatypen regclass för tabellparametern?
Tabellnamn som en PostgreSQL-funktionsparameter

Markör

För fullständighetens skull:Man kan returnera en CURSOR , vilket skulle vara ett mycket liknande koncept som det du ber om. Detaljer i manualen här.
Men jag använder nästan aldrig markörer. Bordsfunktioner är mer praktiska för det mesta.




  1. Slut på support för SQL Server 2008 &2008 R2

  2. Inledningssituation med oracle (sub query stuffs)

  3. Frågetidsresultat i MySQL med PHP

  4. EFTER LOGON(Oracle) trigger i PostgreSQL med tillägg – login_hook