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

Vrátí sadu záznamů (virtuální tabulku) z funkce

(To vše je testováno s postgresql 8.3.7 – máte starší verzi? stačí se podívat, jak používáte „ALIAS ZA 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
$$;

Pokud chcete vrátit proměnnou záznamu nebo řádku (místo výsledku dotazu), použijte "RETURN NEXT" spíše než "RETURN QUERY".

Pro vyvolání funkce musíte udělat něco jako:

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

Takže musíte definovat, co očekáváte, že schéma výstupního řádku funkce bude v dotazu. Abyste tomu zabránili, můžete zadat výstupní proměnné v definici funkce:

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

(nejste si úplně jisti, proč jsou vyžadována další ::textová přetypování... '1' je možná ve výchozím nastavení varchar?)



  1. Jak mohu exportovat schéma databáze v PostgreSQL?

  2. Třídicí strom se zhmotněnou cestou?

  3. connection.select_value vrací řetězce pouze v postgresu s pg gem

  4. Výukový program ovládání ListView-02