PERFORM
е команда plpgsql, използвана за извикване на void функции. PLpgSQL внимава за безполезните SELECT
изрази - SELECT
без INTO
клауза не е разрешена. Но понякога трябва да извикате функция и не е необходимо да съхранявате резултат (или функциите нямат резултат). Функцията в SQL
се извиква с SELECT
изявление. Но това не е възможно в PLpgSQL - така че командата PERFORM
беше въведен.
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
операторите изпълняват параметър и забравят резултата.
Вашият пример perform 'create table foo as (select 1)';
е същото като SELECT 'create table foo as (select 1)'
. Той връща низ "create table foo as (select 1)" и този низ се отхвърля.
EXECUTE
оператор оценява израз, за да получи низ. В следващата стъпка този низ се изпълнява.
Така че EXECUTE 'create table ' || some_var || '(a int)';
има две стъпки
- оценява израз
'create table ' || some_var || '(a int)'
- ако
some_var
е mytab например, след това изпълнете командаcreate table mytab(a int)
PERFORM
операторът се използва за извикване на функции, когато функциите не се използват в оператора за присвояване. EXECUTE
се използва за оценка на динамичен SQL - когато форма на SQL команда е известна по време на изпълнение.