So führen Sie den PostgreSQL RAISE-Befehl dynamisch aus
Wie löse ich einen Fehler in der PostgreSQL-SQL-Anweisung aus, wenn eine Bedingung erfüllt ist?
Ich habe den folgenden Code ausprobiert, aber einen Fehler erhalten.
CREATE OR REPLACE FUNCTION "exec"(text)
RETURNS text AS
$BODY$
BEGIN
EXECUTE $1;
RETURN $1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
-- ERROR: syntax error at or near "raise"
-- LINE 1: raise 'test'
SELECT exec('raise ''test'' ') WHERE TRUE
In der realen AnwendungTRUE
wird durch eine Bedingung ersetzt.
Aktualisieren
Ich habe versucht, die Antwort so zu erweitern, dass Ausnahmemeldungsparameter übergeben werden. Versuchte Code unten, bekam aber Syntaxfehler. Wie werden Nachrichtenparameter übergeben?
CREATE OR REPLACE FUNCTION exec(text, variadic )
RETURNS void LANGUAGE plpgsql AS
$BODY$
BEGIN
RAISE EXCEPTION $1, $2;
END;
$BODY$;
SELECT exec('Exception Param1=% Param2=%', 'param1', 2 );