PERFORM
is het plpgsql-commando dat wordt gebruikt voor het aanroepen van void-functies. PLpgSQL is voorzichtig met nutteloze SELECT
statements - de SELECT
zonder INTO
clausule is niet toegestaan. Maar soms moet je een functie aanroepen en hoef je het resultaat niet op te slaan (of functies hebben geen resultaat). De functie in SQL
wordt aangeroepen met SELECT
uitspraak. Maar het is niet mogelijk in PLpgSQL - dus het commando PERFORM
werd geïntroduceerd.
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;
$$;
De PERFORM
statements voeren een parameter uit en zijn het resultaat vergeten.
Uw voorbeeld perform 'create table foo as (select 1)';
is hetzelfde als SELECT 'create table foo as (select 1)'
. Het retourneert een string "create table foo as (select 1)" en deze string wordt verwijderd.
De EXECUTE
statement evalueer een expressie om string te krijgen. In de volgende stap wordt deze string uitgevoerd.
Dus EXECUTE 'create table ' || some_var || '(a int)';
heeft twee stappen
- uitdrukking evalueren
'create table ' || some_var || '(a int)'
- if
some_var
is mytab bijvoorbeeld, voer dan een commando uitcreate table mytab(a int)
De PERFORM
statement wordt gebruikt voor functieaanroepen, wanneer functies niet worden gebruikt in toewijzingsstatement. De EXECUTE
wordt gebruikt voor evaluatie van dynamische SQL - wanneer een vorm van SQL-commando bekend is in runtime.