1

I'm looking for help with a PostgreSQL function that returns a table. I would like to know if there is a way of updating the table that is being returned.

Here's an example,

create or replace function fn_function()
return table(column01 integer, column02 integer, column03 boolean) as $$
    return query
    select col1, col2, false
    from tableXYZ;


    /* how can i update the table, let's say column03 before the function exits */

end
$$ language plpgsql;

Can i give an alias to the table being returned?

The postgre version in use is 9.0.8.

Thx in advance.

4

3 に答える 3

0

テーブルから選択するには、選択の結果を変更し、関数の結果として渡します。次のようにしてください。

create or replace function fn_function()
returns table (
    column01 integer, column02 integer, column03 boolean
) as $$
begin
    for rec in select col1, col2, false as col3
               from tableXYZ;
    loop
      rec.col3 := col1 > col2;

      return next rec;
    end loop;
    return; 
end
$$ language plpgsql;

詳細here.

この関数の結果を取得するを選択するには

SELECT function_alias.col1, function_alias.col2 
FROM fn_function() function_alias;

この関数を使用すると、通常のテーブルでできることと同じことができます。

于 2013-05-23T16:37:08.850 に答える
0

必要な値を返すクエリを実行するだけです。単純なSQLにすることができます:

create or replace function fn_function()
returns table (
    column01 integer, column02 integer, column03 boolean
) as $$

    select col1, col2, col2 > 10
    from tableXYZ;

$$ language sql;

上記の例では、col2 > 10 の場合は列 3 が true になり、それ以外の場合は false になります。サブセレクトを使用した別の例:

create or replace function fn_function()
returns table (
    column01 integer, column02 integer, column03 boolean
) as $$

    select col1, col2, (select max(col1) > 10 from t where col2 = tableXYZ.col1)
    from tableXYZ;

$$ language sql;

そうではないことに注意してreturnくださいreturns

于 2013-05-23T16:09:50.250 に答える