PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PL/pgSQL wykonaj vs wykonaj

PERFORM jest poleceniem plpgsql używanym do wywołań funkcji void. PLpgSQL jest ostrożny z bezużytecznym SELECT instrukcje - SELECT bez INTO klauzula jest niedozwolona. Ale czasami musisz wywołać funkcję i nie musisz przechowywać wyniku (lub funkcje nie mają wyniku). Funkcja w SQL jest wywoływana z SELECT oświadczenie. Ale nie jest to możliwe w PLpgSQL - więc polecenie PERFORM został wprowadzony.

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 instrukcje wykonują parametr i zapominają wynik.

Twój przykład perform 'create table foo as (select 1)';

działa tak samo jak SELECT 'create table foo as (select 1)' . Zwraca ciąg „utwórz tabelę foo jako (wybierz 1)” i ten ciąg jest odrzucany.

PERFORM instrukcja ocenia wyrażenie, aby uzyskać ciąg. W następnym kroku ten ciąg jest wykonywany.

Więc EXECUTE 'create table ' || some_var || '(a int)'; składa się z dwóch kroków

  1. ocena wyrażenie 'create table ' || some_var || '(a int)'
  2. jeśli some_var jest na przykład mytab, a następnie wykonaj polecenie create table mytab(a int)

PERFORM Instrukcja jest używana do wywołań funkcji, gdy funkcje nie są używane w instrukcji przypisania. PERFORM służy do oceny dynamicznego SQL - gdy forma polecenia SQL jest znana w czasie wykonywania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:unikalne ograniczenie lub unikalny indeks

  2. Jak liczyć dni poza niedzielami między dwiema datami w Postgresie?

  3. Pobieraj posty od nieblokujących użytkowników

  4. Postgres:BŁĄD:wartość za długa dla znaku typu zmienna(255) Nie określa pola

  5. Jak używać funkcji date_part, aby podzielić wartość na miesiąc na każdy dzień i kraj?