sql >> Database teknologi >  >> RDS >> PostgreSQL

Returner sæt af post (virtuel tabel) fra funktion

(Dette er alt sammen testet med postgresql 8.3.7 - har du en tidligere version? Bare se på din brug af "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
$$;

Hvis du har en post eller rækkevariabel at returnere (i stedet for et forespørgselsresultat), skal du bruge "RETURN NEXT" i stedet for "RETURN QUERY".

For at aktivere funktionen skal du gøre noget som:

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

Så du skal definere, hvad du forventer, at outputrækkeskemaet for funktionen skal være i forespørgslen. For at undgå det kan du angive outputvariabler i funktionsdefinitionen:

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
$$;

(ikke helt sikker på, hvorfor de ekstra ::tekst-casts er påkrævet... '1' er måske en varchar som standard?)



  1. Guide til design af database til medarbejderstyringssystem i MySQL

  2. Hvordan opretter man programmæssigt en ODBC-linket tabel til en SQL Server-visning og får den redigerbar?

  3. EF 4, hvordan man tilføjer delklasser

  4. Trin for trin R12.2.6 EBS-installation på Virtual Box Part -2