PERFORM
é o comando plpgsql usado para chamadas de funções void. O PLpgSQL é cuidadoso com o inútil SELECT
instruções - o SELECT
sem INTO
cláusula não é permitida. Mas às vezes você precisa chamar uma função e não precisa armazenar o resultado (ou funções não têm resultado). A função em SQL
é chamado com SELECT
declaração. Mas não é possível em PLpgSQL - então o comando PERFORM
foi introduzido. 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;
$$;
O
PERFORM
instruções executam um parâmetro e esquecem o resultado. Seu exemplo
perform 'create table foo as (select 1)';
é igual a
SELECT 'create table foo as (select 1)'
. Ele retorna uma string "create table foo as (select 1)" e essa string é descartada. O
PERFORM
declaração avaliam uma expressão para obter string. Na próxima etapa, essa string é executada. Então
EXECUTE 'create table ' || some_var || '(a int)';
tem dois passos - avaliar expressão
'create table ' || some_var || '(a int)'
- se
some_var
é mytab por exemplo, então execute um comandocreate table mytab(a int)
O
PERFORM
A instrução é usada para chamadas de função, quando as funções não são usadas na instrução de atribuição. O PERFORM
é usado para avaliação de SQL dinâmico - quando uma forma de comando SQL é conhecida em tempo de execução.