PERFORM
jest poleceniem plpgsql używanym do wywołań funkcji void. PLpgSQL jest ostrożny z bezużytecznym SELECT
instrukcje - SELECT
bez INTO
klauzula jest niedozwolona. Ale czasami musisz wywołać funkcję i nie musisz przechowywać wyniku (lub funkcje nie mają wyniku). Funkcja w SQL
jest wywoływana z SELECT
oświadczenie. Ale nie jest to możliwe w PLpgSQL - więc polecenie PERFORM
został wprowadzony.
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS $$
BEGIN
RAISE NOTICE 'Hello from void function';
END;
$$ LANGUAGE plpgsql;
-- direct call from SQL
SELECT foo();
-- in PLpgSQL
DO $$
BEGIN
SELECT foo(); -- is not allowed
PERFORM foo(); -- is ok
END;
$$;
PERFORM
instrukcje wykonują parametr i zapominają wynik.
Twój przykład perform 'create table foo as (select 1)';
działa tak samo jak SELECT 'create table foo as (select 1)'
. Zwraca ciąg „utwórz tabelę foo jako (wybierz 1)” i ten ciąg jest odrzucany.
PERFORM
instrukcja ocenia wyrażenie, aby uzyskać ciąg. W następnym kroku ten ciąg jest wykonywany.
Więc EXECUTE 'create table ' || some_var || '(a int)';
składa się z dwóch kroków
- ocena wyrażenie
'create table ' || some_var || '(a int)'
- jeśli
some_var
jest na przykład mytab, a następnie wykonaj poleceniecreate table mytab(a int)
PERFORM
Instrukcja jest używana do wywołań funkcji, gdy funkcje nie są używane w instrukcji przypisania. PERFORM
służy do oceny dynamicznego SQL - gdy forma polecenia SQL jest znana w czasie wykonywania.