2016-06-15 15 views
3

私はMSSQLからpostgreSQLに移行していますが、手続き型プログラミングの構文を試しています。考え方は、テーブルを入力/パラメータとして取る関数を作成し、この入力テーブルに対して一連のSELECT文を実行することです(テンポラリテーブルなし、SELECT文はCTEで実行されます)。RETURN最終テーブル。テーブルをpostgreSQL関数に渡し、select文を実行してテーブルを返す

入力テーブルは非常に簡単になります:

Col_1  Col_2  Col_3 
---------------------------- 
2   5   12 

私は数を計算するために入力テーブルの各フィールドを使用する(この例では、Col_1Col_2、及びCol_3を加算する)、追加入力テーブルにそれ、そのように表示される出力テーブルを作成:

Col 1  Col_2  Col_3  Col_4 
--------------------------------------- 
2   5   12  19 

コードでの私の試み:

CREATE OR REPLACE FUNCTION summing_function(input_table) 
RETURNS output_table(Col_1 INT, Col_2 INT, Col_3 INT, Col_4 INT) AS 
$$ 
SELECT 
    i.* 
    , i."Col_1" + i."Col_2" + i."Col_3" as sum 
INTO output_table 
FROM input_table i 
$$ 
LANGUAGE SQL; 

もちろん、ドル相場の間のすべてが不完全/間違っています。ドルの引用符間のピースの正しいpostgreSQLの構文は何ですか?

+0

があなたの代わりに使用したいものを眺めませんか? (この質問は、ビューを使うべきではありませんが、ここから実際にビューを使用することができない理由を理解するための質問です) –

+0

ビューは非常に良い解決策になります。私は、一般的なpostgreSQLの構文と制約についていくつか解明しようとしていました。 –

答えて

0

"テーブル"を関数の引数として渡すことはできません。あなたは PL/pgSQL関数にテーブルの名前を渡し、その後dynamic query実行することができます。

CREATE OR REPLACE FUNCTION summing_function(input_table text) 
    RETURNS TABLE (col_1 int, col_2 int, col_3 int, col_4 int) AS $$ 
BEGIN 
    RETURN QUERY EXECUTE 
     format('SELECT *, col_1 + col_2 + col_3 FROM %I', input_table); 
END; 
$$ LANGUAGE plpgsql; 
関連する問題