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

ストアドプロシージャでカスタマイズされたオプションを設定する

    最初の解決策

    SETの構文 は:

    SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value |'value' | DEFAULT }
    

    ここで、 value 指定されたconfiguration_parameterの新しい値です 。

    _user_idに保存されている値を割り当てるため 変数の場合、動的コマンドを生成してから EXECUTE

    これがその方法です:

    CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true) 
    RETURNS void 
    LANGUAGE PLPGSQL
    AS $$
    BEGIN
      EXECUTE 'SET my.user_id TO ' || quote_nullable(_user_id);
    END;
    $$;
    

    SQLフィドル を添付する テスト目的のリンク。

    注:

    • quote_nullable() 関数はNULLを返します 入力引数がnullの場合。あなたの場合は必要ないかもしれません。

    2番目の解決策

    <でも同じことができます。 code> set_config() @a_horse_with_no_nameに記載されているように機能します。その場合、関数は次のようになります。

    CREATE OR REPLACE FUNCTION set_user(_user_id bigint, is_local boolean default true) 
    RETURNS void 
    LANGUAGE PLPGSQL
    AS $$
    BEGIN
      PERFORM set_config('my.user_id', _user_id::TEXT, false);
    END;
    $$;
    

    SQLフィドル を添付する テスト目的のリンク。

    注:

    • 2番目の引数をvarchar型に明示的にキャストする必要があります
    • PERFORM 式を評価し、必要がないため結果を破棄するために使用されます
    • quote_nullable()を使用できます ここでも機能します



    1. Mysql:いいねで注文しますか?

    2. SpringBootアプリケーションのschema.sqlにDROPTABLEIFEXISTSを使用できません

    3. データソースを構成せずにODBCリンクサーバーを作成する

    4. Where句でAliasを使用する方法は?