Nemůžete volat RAISE
dynamicky (pomocí EXECUTE
) v PL/pgSQL – to funguje pouze pro příkazy SQL a RAISE
je příkaz PL/pgSQL.
Místo toho použijte tuto jednoduchou funkci:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
Volejte:
SELECT f_raise('My message is empty!');
Související:
Další odpověď na
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$;
Volejte:
SELECT f_raise1('the','manual','educates');
-
VARIADIC
není datový typ, ale režim argumentů . -
S prvky je třeba zacházet jako s jakýmkoli jiným prvkem pole.
-
Chcete-li použít více proměnných v
RAISE
příkaz, vložte více%
do textu zprávy.
Výše uvedený příklad selže bez $3
je předán. Museli byste sestavit řetězec z proměnného počtu vstupních prvků. Příklad:
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$;
Volejte:
SELECT f_raise2('the','manual','educates');
Pochybuji, že potřebujete VARIADIC
parametr pro to vůbec. Přečtěte si příručku zde> .
Místo toho definujte všechny parametry, možná přidejte výchozí hodnoty:
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$;
Volejte:
SELECT f_raise3('the','manual','educates');
Nebo:
SELECT f_raise3(); -- defaults kick in