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.