Du kan ikke kalde RAISE
dynamisk (med EXECUTE
) i PL/pgSQL - der kun virker til SQL-sætninger, og RAISE
er en PL/pgSQL-kommando.
Brug denne simple funktion i stedet:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
Ring til:
SELECT f_raise('My message is empty!');
Relateret:
Yderligere svar på argumenttilstand .
Elementer skal håndteres som ethvert andet array-element.
At bruge flere variable i en RAISE
sætning, indsæt flere %
ind i beskedteksten.
Ovenstående eksempel vil mislykkes, hvis ingen $3
er bestået. Du bliver nødt til at samle en streng fra det variable antal input-elementer. Eksempel:
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$;
Ring til:
SELECT f_raise2('the','manual','educates');
Jeg tvivler på, at du har brug for en VARIADIC
parameter for dette overhovedet. Læs manualen her .
Definer i stedet alle parametre, tilføj måske standardindstillinger:
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$;
Ring til:
SELECT f_raise3('the','manual','educates');
Eller:
SELECT f_raise3(); -- defaults kick in