RAISE
を呼び出すことはできません 動的に(EXECUTE
を使用) )PL/pgSQLの場合-SQLステートメントでのみ機能します。RAISE
PL/pgSQLコマンドです。
代わりに、次の単純な関数を使用してください:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
電話:
SELECT f_raise('My message is empty!');
関連:
コメントへの追加の回答
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$;
電話:
SELECT f_raise1('the','manual','educates');
-
VARIADIC
はデータ型ではありませんが、引数モード です。 。 -
要素は、他の配列要素と同じように処理する必要があります。
-
RAISE
で複数の変数を使用するには ステートメント、複数の%
を入力します メッセージテキストに。
$3
がない場合、上記の例は失敗します 合格。可変数の入力要素から文字列を組み立てる必要があります。例:
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$;
電話:
SELECT f_raise2('the','manual','educates');
VARIADIC
が必要だとは思えません このためのパラメータ。 こちらのマニュアル> 。
代わりに、すべてのパラメータを定義し、デフォルトを追加することもできます:
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$;
電話:
SELECT f_raise3('the','manual','educates');
または:
SELECT f_raise3(); -- defaults kick in