sql >> Database >  >> RDS >> PostgreSQL

hoe de temp-tabel van de postgres-functie te retourneren?

Tijdelijke tafel

Om je vraag in de titel te beantwoorden:
Eén kan niet "retourneer een tijdelijke tabel van de postgres-functie". Tijdelijke tabellen worden gemaakt en automatisch zichtbaar voor dezelfde gebruiker binnen dezelfde sessie. Ze worden automatisch verwijderd aan het einde van de sessie (of eerder).

Tabelfunctie

Maar een set-retourfunctie (ook bekend als "tabelfunctie") kan net als een tabel worden gebruikt:

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;

Zou alleen zinvol zijn voor een aantal tabellen die allemaal de hardgecodeerde kolomnamen delen met hetzelfde gegevenstype.
Bellen (net als selecteren uit een tabel):

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

Waarom het gegevenstype regclass voor de tabelparameter?
Tabelnaam als een PostgreSQL-functieparameter

Cursor

Voor de volledigheid:men kan een CURSOR . teruggeven , wat een zeer vergelijkbaar concept zou zijn als waar u om vraagt. Details in de handleiding hier.
Maar ik gebruik bijna nooit cursors. Tabelfuncties zijn meestal praktischer.




  1. Hoe gegevens genereren in MySQL?

  2. Een tabel partitioneren met behulp van een LIKE-criterium in Mysql

  3. Hoe de Oracle db-verbindingstime-out in de lente Boot-toepassing in te stellen?

  4. Hoe SQLServer-database en MySQL-database te synchroniseren