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

オールインワン動的クエリ用のPL/pgSQL

    いくつかのテーブル定義とあなたがやろうとしていることのサンプルクエリを投稿していただけますか?何を求めているのか100%わかりませんが、ストアドプロシージャ/関数を使用した「動的」SQLにはいくつかの形式があります。

    1. 入力パラメータ(categoryType、styleId、eventName、areaIdなど)を受け取る関数を作成し、それらの値を「静的」SQLリクエストにプラグインします。ケースのサンプルクエリスニペットは次のとおりです。

    これが実際の例です:

    CREATE OR REPLACE FUNCTION SP_IGLGetItem(
        pItemId INTEGER
    ) 
    RETURNS TABLE(
        ItemId INTEGER,
        ItemName VARCHAR(100),
        ItemCategory CHAR(2) 
    AS
    $$
    BEGIN
        RETURN QUERY
        SELECT i.ItemId, i.ItemName, i.ItemCategory
        FROM Item i
        WHERE (i.ItemId = pItemId OR pItemId IS NULL) -- Return single item (if specified, otherwise return all)
        ;
    END;
    $$
    LANGUAGE 'plpgsql';
    
    1. さまざまな条件やパラメータ値などに基づいて動的に実行するSQLを含む文字列を作成します。これは可能な限り動的です。

    2. 入力パラメータの値に基づいて、さまざまな「静的」SQLステートメントを条件付きで実行します。

    これらのいずれかがあなたの状況に一致しますか?

    PL / PGSQLは、Postgresでストアドプロシージャ/関数を作成するために使用される言語です。動的SQL生成が本当に必要な場合は、PL/PGSQLを使用して関数を作成するのが最善の策です。

    もう1つのオプションは、クライアントアプリケーションで必要なSQLを動的に生成し、そのSQLを直接送信して実行することです。



    1. 異なるORDERBY句を持つ2つのSQLクエリを組み合わせる方法

    2. Doctrine 2 DQLでnow()を使用するにはどうすればよいですか?

    3. Laravelにおける外部キーとEloquentの関係の移行

    4. パーミッション拒否エラーを与えるPostgresqlCOPYコマンド