PERFORM
je příkaz plpgsql používaný pro volání funkcí void. PLpgSQL si dává pozor na zbytečné SELECT
příkazy - SELECT
bez INTO
doložka není povolena. Někdy ale potřebujete zavolat funkci a nemusíte ukládat výsledek (nebo funkce nemají žádný výsledek). Funkce v SQL
se volá pomocí SELECT
tvrzení. V PLpgSQL to ale nejde - takže příkaz PERFORM
byl představen.
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
příkazy spouštějí parametr a zapomínají výsledek.
Váš příklad perform 'create table foo as (select 1)';
je stejný jako SELECT 'create table foo as (select 1)'
. Vrátí řetězec „vytvořit tabulku foo jako (vyberte 1)“ a tento řetězec se zahodí.
EXECUTE
příkaz vyhodnotit výraz pro získání řetězce. V dalším kroku se tento řetězec provede.
Takže EXECUTE 'create table ' || some_var || '(a int)';
má dva kroky
- vyhodnotit výraz
'create table ' || some_var || '(a int)'
- pokud
some_var
je například mytab, pak spusťte příkazcreate table mytab(a int)
PERFORM
příkaz se používá pro volání funkcí, když se funkce nepoužívají v příkazu přiřazení. EXECUTE
se používá pro vyhodnocení dynamického SQL - když je známa forma SQL příkazu za běhu.