PERFORM är plpgsql-kommandot som används för anrop av void-funktioner. PLpgSQL är försiktig med värdelösa SELECT satser - SELECT utan INTO klausul är inte tillåten. Men ibland behöver du anropa en funktion och du behöver inte lagra resultat (eller så har funktioner inget resultat). Funktionen i SQL anropas med SELECT påstående. Men det är inte möjligt i PLpgSQL - så kommandot PERFORM introducerades.
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 satser exekverar en parameter och glömde resultatet.
Ditt exempel perform 'create table foo as (select 1)';
är samma som SELECT 'create table foo as (select 1)' . Den returnerar en sträng "skapa tabell foo som (välj 1)" och den här strängen kasseras.
EXECUTE sats utvärdera ett uttryck för att få sträng. I nästa steg exekveras denna sträng.
Så EXECUTE 'create table ' || some_var || '(a int)'; har två steg
- utvärdera uttrycket
'create table ' || some_var || '(a int)' - if
some_varär mytab till exempel, kör sedan kommandotcreate table mytab(a int)
PERFORM sats används för funktionsanrop, när funktioner inte används i tilldelningssats. EXECUTE används för utvärdering av dynamisk SQL - när en form av SQL-kommando är känd i runtime.