いくつかのテーブル定義とあなたがやろうとしていることのサンプルクエリを投稿していただけますか?何を求めているのか100%わかりませんが、ストアドプロシージャ/関数を使用した「動的」SQLにはいくつかの形式があります。
- 入力パラメータ(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';
-
さまざまな条件やパラメータ値などに基づいて動的に実行するSQLを含む文字列を作成します。これは可能な限り動的です。
-
入力パラメータの値に基づいて、さまざまな「静的」SQLステートメントを条件付きで実行します。
これらのいずれかがあなたの状況に一致しますか?
PL / PGSQLは、Postgresでストアドプロシージャ/関数を作成するために使用される言語です。動的SQL生成が本当に必要な場合は、PL/PGSQLを使用して関数を作成するのが最善の策です。
もう1つのオプションは、クライアントアプリケーションで必要なSQLを動的に生成し、そのSQLを直接送信して実行することです。