sql >> Base de Datos >  >> RDS >> PostgreSQL

PL/pgSQL realizar vs ejecutar

PERFORM es el comando plpgsql utilizado para llamadas de funciones nulas. PLpgSQL tiene cuidado con SELECT inútil declaraciones - el SELECT sin INTO No se permite la cláusula. Pero a veces necesita llamar a una función y no necesita almacenar el resultado (o las funciones no tienen resultado). La función en SQL se llama con SELECT declaración. Pero no es posible en PLpgSQL, por lo que el comando PERFORM fue presentado.

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;
$$;

El PERFORM Las declaraciones ejecutan un parámetro y olvidaron el resultado.

Su ejemplo perform 'create table foo as (select 1)';

es lo mismo que SELECT 'create table foo as (select 1)' . Devuelve una cadena "crear tabla foo como (seleccione 1)" y esta cadena se descarta.

El EXECUTE instrucción evalúa una expresión para obtener una cadena. En el siguiente paso se ejecuta esta cadena.

Entonces EXECUTE 'create table ' || some_var || '(a int)'; tiene dos pasos

  1. evaluar expresión 'create table ' || some_var || '(a int)'
  2. si some_var es mytab por ejemplo, luego ejecute un comando create table mytab(a int)

El PERFORM La declaración se usa para llamadas a funciones, cuando las funciones no se usan en la declaración de asignación. El EXECUTE se utiliza para la evaluación de SQL dinámico, cuando se conoce una forma de comando SQL en tiempo de ejecución.