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

Postgres関数の列名としてパラメーターを使用する

    パラメータを識別子(=列名)として使用することはできません。そのためには動的SQLが必要です。そして、それにはPL / pgSQLが必要です:

    CREATE OR REPLACE FUNCTION day_entries(p_id int, p_column text) 
      RETURNS BIGINT[] 
    AS
    $$
    declare 
      l_result bigint[];
    begin
      execute format('SELECT %I FROM days WHERE id = $1', p_column) 
         using p_id
         into l_result;
      return l_result;
    end;     
    $$
    LANGUAGE plpgsql;
    

    format()は、動的SQLを構築するときに識別子を適切に処理します。 $1 はパラメータプレースホルダーであり、その値はusing p_idで渡されます executeの句 ステートメント。




    1. java.util.MissingFormatArgumentException:フォーマット指定子:s

    2. PHPPDOプリペアドステートメント-MySQLLIKEクエリ

    3. MySQLで文字列から時間を取得する方法

    4. あなたではなく、私です(I / Oトラブルシューティング)