Vous ne pouvez pas appeler RAISE
dynamiquement (avec EXECUTE
) dans PL/pgSQL - qui ne fonctionne que pour les instructions SQL, et RAISE
est une commande PL/pgSQL.
Utilisez plutôt cette fonction simple :
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
Appel :
SELECT f_raise('My message is empty!');
Connexe :
Réponse supplémentaire à commentaire
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$;
Appel :
SELECT f_raise1('the','manual','educates');
-
VARIADIC
n'est pas un type de données, mais un mode argument . -
Les éléments doivent être traités comme n'importe quel autre élément de tableau.
-
Pour utiliser plusieurs variables dans un
RAISE
instruction, mettez plusieurs%
dans le texte du message.
L'exemple ci-dessus échouera si aucun $3
est passé. Vous devez assembler une chaîne à partir du nombre variable d'éléments d'entrée. Exemple :
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$;
Appel :
SELECT f_raise2('the','manual','educates');
Je doute que vous ayez besoin d'un VARIADIC
paramètre pour cela du tout. Lisez le manuel ici .
Définissez plutôt tous les paramètres, ajoutez peut-être des valeurs par défaut :
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$;
Appel :
SELECT f_raise3('the','manual','educates');
Ou :
SELECT f_raise3(); -- defaults kick in