Как написать эту функцию как функцию pL / pgSQl? - PullRequest
0 голосов
/ 18 мая 2010

Я пытаюсь реализовать некоторую бизнес-логику в функции PL / pgSQL.

Я собрал несколько псевдокодов, объясняющих тип бизнес-логики, которую я хочу включить в функцию.

Примечание. Эта функция возвращает таблицу, поэтому я могу использовать ее в запросах типа:

ВЫБРАТЬ A.col1, B.col1 ОТ (ВЫБРАТЬ * из some_table_returning_func (1, 1, 2, 3) как A), tbl2 как 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. Как можно написать функцию PL / pgSQL, которая принимает таблицу и целое число и возвращает таблицу (another_table_returning_func)?

1 Ответ

1 голос
/ 18 мая 2010

1.) Табличный результат можно вернуть с помощью предложения SETOF: ВОЗВРАЩАЕТ SETOF tablename

...