Postgresql stored procedure return select result s

2019-07-10 16:07发布

问题:

In Microsoft SQL server I could do something like this :

create procedure my_procedure @argument1 int, @argument2 int
as
    select *
    from my_table
    where ID > @argument1 and ID < @argument2

And that would return me table with all columns from my_table.

Closest thing to that what I managed to do in postgresql is :

create or replace function
    get_test()
returns setof record
as
$$ select * from my_table $$
language sql

or i could define my table type, but manually recreating what technically already exists is very impractical.

create or replace function
    get_agent_summary()
returns table (
    column1 type, column2 type, ...
)
as
$$
begin
    return query select col1, col2, ... from my_existing_table;
...

and it is pain to maintain.

So, how can I easily return resultset without redefining defining every single column from table that I want to return?

回答1:

In Postgres a table automatically defines the corresponding type:

create or replace function select_my_table(argument1 int, argument2 int)
returns setof my_table language sql as $$
    select *
    from my_table
    where id > argument1 and id < argument2;
$$;

select * from select_my_table(0, 2);

The syntax is more verbose than in MS SQL Server because you can create functions in one of several languages and functions may be overloaded.