PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PL/pgSQL изпълнение срещу изпълнение

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)'; има две стъпки

  1. оценява израз 'create table ' || some_var || '(a int)'
  2. ако some_var е mytab например, след това изпълнете команда create table mytab(a int)

PERFORM операторът се използва за извикване на функции, когато функциите не се използват в оператора за присвояване. EXECUTE се използва за оценка на динамичен SQL - когато форма на SQL команда е известна по време на изпълнение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разстояние между 2 ТОЧКИ в Postgis в srid 4326 в метри

  2. Възможно ли е да се напише преобразувател на тип данни за обработка на колони JSON на postgres?

  3. Грешка в динамичен израз PL/PGSQL (функциите и операторите могат да приемат най-много един зададен аргумент)

  4. Как да заменя таблица в Postgres?

  5. Пренасочване на вмъкване, базирано на задействане на Postgres, без прекъсване на RETURNING