PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PL/pgSQL executa vs executa


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
  1. avaliar expressão 'create table ' || some_var || '(a int)'
  2. se some_var é mytab por exemplo, então execute um comando create 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.