sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLRAISEコマンドを動的に実行する方法

    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
    



    1. mysqldumpバックアップから相互依存ビューを実行します

    2. OracleのストアドプロシージャからResultSetを返す方法は?

    3. 幅優先探索方式での一般的なツリートラバーサル(無限)

    4. MySQLを使用した大規模な結果セットのストリーミング