0

PL/pgSQL 関数にいくつかのビジネス ロジックを実装しようとしています。

関数に含めたいビジネス ロジックのタイプを説明する疑似コードをまとめました。

注: この関数はテーブルを返すため、次のようなクエリで使用できます。

SELECT A.col1, B.col1 FROM (SELECT * from some_table_returning_func(1, 1, 2, 3) as A), tbl2 as B;

pl/PgSQL 関数の擬似コードは次のとおりです。

CREATE FUNCTION some_table_returning_func(uid int, type_id int, filter_type_id int, filter_id int) RETURNS TABLE AS $$

  DECLARE
  where_clause text := 'tbl1.id = ' + uid;
  ret TABLE;

  BEGIN

  switch (filter_type_id)
  {
      case 1:
     switch (filter_id)
     {  
         case 1:
                where_clause += ' AND tbl1.item_id = tbl2.id AND tbl2.type_id = filter_id';
                break;

             //other cases follow ...
     }
     break;

      //other cases follow ...
   }

   // where clause has been built, now run query based on the type
   ret = SELECT [COL1, ... COLN] WHERE where_clause;

   IF (type_id <> 1) THEN
      return ret;
   ELSE
      return select * from another_table_returning_func(ret,123);
   ENDIF;

END;
$$ LANGUAGE plpgsql;

次の質問があります。

  1. 関数を正しく記述するにはどうすればよいですか (つまり、生成された WHERE 句を使用してクエリを実行し、テーブルを返すには

  2. テーブルと整数を受け取り、テーブル (another_table_returning_func) を返す PL/pgSQL 関数を作成するにはどうすればよいですか?

4

1 に答える 1

1

1.) SETOF 句を使用してテーブルのような結果を返すことができます: RETURNS SETOF tablename

于 2010-05-17T22:11:39.000 に答える