sql >> Databáze >  >> RDS >> PostgreSQL

Jak dynamicky spustit příkaz PostgreSQL RAISE

Nemůžete volat RAISE dynamicky (pomocí EXECUTE ) v PL/pgSQL – to funguje pouze pro příkazy SQL a RAISE je příkaz PL/pgSQL.

Místo toho použijte tuto jednoduchou funkci:

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

Volejte:

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

Související:

Další odpověď na

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

Volejte:

SELECT f_raise1('the','manual','educates');
  • VARIADIC není datový typ, ale režim argumentů .

  • S prvky je třeba zacházet jako s jakýmkoli jiným prvkem pole.

  • Chcete-li použít více proměnných v RAISE příkaz, vložte více % do textu zprávy.

Výše uvedený příklad selže bez $3 je předán. Museli byste sestavit řetězec z proměnného počtu vstupních prvků. Příklad:

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

Volejte:

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

Pochybuji, že potřebujete VARIADIC parametr pro to vůbec. Přečtěte si příručku zde .
Místo toho definujte všechny parametry, možná přidejte výchozí hodnoty:

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

Volejte:

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

Nebo:

SELECT f_raise3();  -- defaults kick in



  1. Uložte hodnotu php do Java

  2. Core Error Entity Framework:Při připojení k databázi '' na serveru 'localhost' došlo k chybě

  3. SQL problém s cenami hotelových rezervací

  4. INSERT IGNORE pomocí Laravel's Fluent