No puedes llamar a RAISE
dinámicamente (con EXECUTE
) en PL/pgSQL, que solo funciona para instrucciones SQL y RAISE
es un comando PL/pgSQL.
Utilice esta función simple en su lugar:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
Llamar:
SELECT f_raise('My message is empty!');
Relacionado:
Respuesta adicional a comentario
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$;
Llamar:
SELECT f_raise1('the','manual','educates');
-
VARIADIC
no es un tipo de datos, sino un modo argumento . -
Los elementos deben manejarse como cualquier otro elemento de matriz.
-
Para usar múltiples variables en un
RAISE
declaración, poner múltiples%
en el texto del mensaje.
El ejemplo anterior fallará si no $3
esta pasado. Tendría que ensamblar una cadena a partir del número variable de elementos de entrada. Ejemplo:
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$;
Llamar:
SELECT f_raise2('the','manual','educates');
Dudo que necesites un VARIADIC
parámetro para esto en absoluto. Lea el manual aquí .
En su lugar, defina todos los parámetros, tal vez agregue valores predeterminados:
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$;
Llamar:
SELECT f_raise3('the','manual','educates');
O:
SELECT f_raise3(); -- defaults kick in