Non puoi chiamare RAISE
dinamicamente (con EXECUTE
) in PL/pgSQL - che funziona solo per le istruzioni SQL e RAISE
è un comando PL/pgSQL.
Usa invece questa semplice funzione:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
Chiama:
SELECT f_raise('My message is empty!');
Correlati:
Risposta aggiuntiva a commento
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$;
Chiama:
SELECT f_raise1('the','manual','educates');
-
VARIADIC
non è un tipo di dati, ma una modalità argomento . -
Gli elementi devono essere gestiti come qualsiasi altro elemento dell'array.
-
Per utilizzare più variabili in un
RAISE
istruzione, inserisci più%
nel testo del messaggio.
L'esempio sopra avrà esito negativo se non $3
è passato. Dovresti assemblare una stringa dal numero variabile di elementi di input. Esempio:
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$;
Chiama:
SELECT f_raise2('the','manual','educates');
Dubito che tu abbia bisogno di un VARIADIC
parametro per questo affatto. Leggi il manuale qui .
Invece, definisci tutti i parametri, magari aggiungi dei default:
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$;
Chiama:
SELECT f_raise3('the','manual','educates');
Oppure:
SELECT f_raise3(); -- defaults kick in