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

Jak dynamicznie wykonać polecenie PostgreSQL RAISE?

Nie możesz zadzwonić RAISE dynamicznie (za pomocą EXECUTE ) w PL/pgSQL - działa tylko dla instrukcji SQL oraz RAISE jest poleceniem PL/pgSQL.

Zamiast tego użyj tej prostej funkcji:

CREATE OR REPLACE FUNCTION f_raise(text)
  RETURNS void
  LANGUAGE plpgsql AS
$func$
BEGIN
   RAISE EXCEPTION '%', $1;
END
$func$;

Zadzwoń:

SELECT f_raise('My message is empty!');

Powiązane:

Dodatkowa odpowiedź na komentarz

CREATE OR REPLACE FUNCTION f_raise1(VARIADIC text[])
  RETURNS void
  LANGUAGE plpgsql AS
$func$
BEGIN 
   RAISE EXCEPTION 'Reading % % %!', $1[1], $1[2], $1[3];
END
$func$;

Zadzwoń:

SELECT f_raise1('the','manual','educates');
  • VARIADIC nie jest typem danych, ale trybem argumentacji .

  • Elementy muszą być obsługiwane jak każdy inny element tablicy.

  • Aby użyć wielu zmiennych w RAISE oświadczenie, umieść wiele % do tekstu wiadomości.

Powyższy przykład nie powiedzie się, jeśli nie $3 minął. Musiałbyś złożyć łańcuch ze zmiennej liczby elementów wejściowych. Przykład:

CREATE OR REPLACE FUNCTION f_raise2(VARIADIC _arr text[]) 
  RETURNS void
  LANGUAGE plpgsql AS 
$func$  
DECLARE
   _msg text := array_to_string(_arr, ' and ');  -- simple string construction
BEGIN  
   RAISE EXCEPTION 'Reading %!', _msg;
END
$func$;

Zadzwoń:

SELECT f_raise2('the','manual','educates');

Wątpię, czy potrzebujesz VARIADIC parametr do tego w ogóle. Przeczytaj instrukcję tutaj .
Zamiast tego zdefiniuj wszystkie parametry, może dodaj wartości domyślne:

CREATE OR REPLACE FUNCTION f_raise3(_param1 text = ''
                                  , _param2 text = ''
                                  , _param3 text = 'educates')
  RETURNS void
  LANGUAGE plpgsql AS
$func$
BEGIN
   RAISE EXCEPTION 'Reading % % %!', $1, $2, $3;
END 
$func$;

Zadzwoń:

SELECT f_raise3('the','manual','educates');

Lub:

SELECT f_raise3();  -- defaults kick in



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualizacja pola json w Postgres

  2. Kolumna SELECT AS nie istnieje w klauzuli WHERE

  3. C#, Entity Framework Core &PostgreSql :wstawienie pojedynczego wiersza zajmuje ponad 20 sekund

  4. zapisywalne wspólne wyrażenie tabelowe i wielokrotne instrukcje wstawiania

  5. utworzyć milion tabeli w bazie danych?