Sie können RAISE
nicht anrufen dynamisch (mit EXECUTE
) in PL/pgSQL - das funktioniert nur für SQL-Anweisungen und RAISE
ist ein PL/pgSQL-Befehl.
Verwenden Sie stattdessen diese einfache Funktion:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
Aufruf:
SELECT f_raise('My message is empty!');
Verwandte:
Zusätzliche Antwort auf Kommentar
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$;
Aufruf:
SELECT f_raise1('the','manual','educates');
-
VARIADIC
ist kein Datentyp, sondern ein Argumentmodus . -
Elemente müssen wie alle anderen Array-Elemente behandelt werden.
-
Um mehrere Variablen in einem
RAISE
zu verwenden Anweisung, setzen Sie mehrere%
in den Nachrichtentext.
Das obige Beispiel schlägt fehl, wenn $3
nicht vorhanden ist ist bestanden. Sie müssten aus der variablen Anzahl von Eingabeelementen einen String zusammensetzen. Beispiel:
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$;
Aufruf:
SELECT f_raise2('the','manual','educates');
Ich bezweifle, dass Sie ein VARIADIC
benötigen Parameter dafür überhaupt. Lesen Sie das Handbuch hier .
Definiere stattdessen alle Parameter, füge vielleicht Standardwerte hinzu:
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$;
Aufruf:
SELECT f_raise3('the','manual','educates');
Oder:
SELECT f_raise3(); -- defaults kick in