Nemůžete vrátí hodnoty z DO
tvrzení. Místo toho vytvořte funkci plpgsql.
Existuje několik způsobů, jak definovat návratový typ pomocí RETURNING
klauzule nebo s OUT
parametry. Přečtěte si příručku o CREATE FUNCTION
.
Existuje několik způsobů, jak vrátit hodnoty z funkce. Přečtěte si kapitolu Návrat z funkce v návodu.
Zejména, protože se pokoušíte vrátit celé řádky z tabulky, můžete pro deklaraci funkce použít registrovaný typ tabulky:
CREATE FUNCTION foo ()
RETURNING SETOF test_log
$func$
BEGIN
IF 'a' = 'a' THEN
RETURN QUERY
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$func$ LANGUAGE plpgsql;
Volejte:
SELECT * FROM foo ();
Nebo zkuste hledat zde na SO. Odeslal jsem mnoho související příklady kódu .
Řešení pro DO
prohlášení
Pokud nemůžete použít funkci, jediné z poloviny rozumné řešení s příkazem DO je použití dočasné tabulky:
CREATE TEMP TABLE tbl_tmp AS
SELECT * FROM test_log LIMIT 0;
$do$
BEGIN
IF 'a' = 'a' THEN
INSERT INTO tbl_tmp
SELECT * FROM test_log LIMIT 10;
ELSE
RAISE WARNING $$Didn't work!$$;
END IF;
END
$do$ LANGUAGE plpgsql;
SELECT * FROM tbl_tmp;
Dočasné stoly jsou na konci relace automaticky zrušeny .