2010-05-17 31 views
0

我想實現在PL/pgSQL函數的一些業務邏輯。如何寫這個功能作爲一個PL/pgSQL函數?

我已經砍死在一起,說明我想在功能包含業務邏輯的類型,一些僞代碼。

注意:此函數返回一個表,所以可以像一個查詢使用它:

SELECT A.col1,B.col1 FROM(SELECT * FROM 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_re turning_func)?

回答

1

1)您可以返回與SETOF子句的表樣的結果:返回SETOF表名