Nie możesz zadzwonić RAISE
dynamicznie (za pomocą EXECUTE
) w PL/pgSQL - działa tylko dla instrukcji SQL oraz RAISE
jest poleceniem PL/pgSQL.
Zamiast tego użyj tej prostej funkcji:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
Zadzwoń:
SELECT f_raise('My message is empty!');
Powiązane:
Dodatkowa odpowiedź na komentarz
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$;
Zadzwoń:
SELECT f_raise1('the','manual','educates');
-
VARIADIC
nie jest typem danych, ale trybem argumentacji . -
Elementy muszą być obsługiwane jak każdy inny element tablicy.
-
Aby użyć wielu zmiennych w
RAISE
oświadczenie, umieść wiele%
do tekstu wiadomości.
Powyższy przykład nie powiedzie się, jeśli nie $3
minął. Musiałbyś złożyć łańcuch ze zmiennej liczby elementów wejściowych. Przykład:
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$;
Zadzwoń:
SELECT f_raise2('the','manual','educates');
Wątpię, czy potrzebujesz VARIADIC
parametr do tego w ogóle. Przeczytaj instrukcję tutaj .
Zamiast tego zdefiniuj wszystkie parametry, może dodaj wartości domyślne:
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$;
Zadzwoń:
SELECT f_raise3('the','manual','educates');
Lub:
SELECT f_raise3(); -- defaults kick in