sql >> Database >  >> RDS >> PostgreSQL

Retourrecord (virtuele tabel) van functie

(Dit is allemaal getest met postgresql 8.3.7-- heb je een eerdere versie? Kijk maar naar je gebruik van "ALIAS FOR $1")

CREATE OR REPLACE FUNCTION storeopeninghours_tostring(numeric)
 RETURNS SETOF RECORD AS $$
DECLARE
 open_id ALIAS FOR $1;
 result RECORD;
BEGIN
 RETURN QUERY SELECT '1', '2', '3';
 RETURN QUERY SELECT '3', '4', '5';
 RETURN QUERY SELECT '3', '4', '5';
END
$$;

Als u een record- of rijvariabele wilt retourneren (in plaats van een zoekresultaat), gebruik dan "RETURN NEXT" in plaats van "RETURN QUERY".

Om de functie aan te roepen moet je iets doen als:

select * from storeopeninghours_tostring(1) f(a text, b text, c text);

U moet dus definiëren wat u van het uitvoerrijschema van de functie in de query verwacht. Om dat te voorkomen, kunt u uitgangsvariabelen specificeren in de functiedefinitie:

CREATE OR REPLACE FUNCTION storeopeninghours_tostring(open_id numeric, a OUT text, b OUT text, c OUT text)
 RETURNS SETOF RECORD LANGUAGE 'plpgsql' STABLE STRICT AS $$
BEGIN
 RETURN QUERY SELECT '1'::text, '2'::text, '3'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
END
$$;

(niet helemaal zeker waarom de extra ::text casts nodig zijn... '1' is misschien standaard een varchar?)



  1. Een gids voor het implementeren van TimescaleDB met Docker

  2. Onbewerkte SQL-querystring ophalen uit door PDO voorbereide instructies

  3. 8 Nieuwe Oracle-compatibiliteitsfuncties in EnterpriseDB PPAS 9.2 Beta

  4. Hoe verklein ik mijn SQL Server-database?