nie możesz zwracać wartości z DO
oświadczenie. Zamiast tego utwórz funkcję plpgsql.
Istnieje kilka sposobów zdefiniowania typu zwracanego za pomocą RETURNING
klauzula lub z OUT
parametry. Przeczytaj instrukcję o CREATE FUNCTION
.
Istnieje kilka sposobów na zwrócenie wartości z funkcji. Przeczytaj rozdział Powrót z funkcji w instrukcji.
W szczególności, ponieważ próbujesz zwrócić całe wiersze z tabeli, możesz użyć zarejestrowanego typu tabeli do deklaracji funkcji:
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;
Zadzwoń:
SELECT * FROM foo ();
Lub spróbuj poszukać tutaj na SO. Zamieściłem wiele powiązane przykłady kodu .
Obejście dla DO
oświadczenie
Jeśli nie możesz użyć funkcji, jedynym połowicznym sensownym obejściem instrukcji DO jest użycie tabeli tymczasowej:
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;
Tymczasowe tabele są automatycznie usuwane na koniec sesji .