Postgresql存储过程返回选择结果集

Rey*_*och 4 sql-server postgresql resultset

在Microsoft SQL服务器中,我可以这样做:

create procedure my_procedure @argument1 int, @argument2 int
as
    select *
    from my_table
    where ID > @argument1 and ID < @argument2
Run Code Online (Sandbox Code Playgroud)

这将返回我的所有列的表my_table.

我在postgresql中设法做的最近的事情是:

create or replace function
    get_test()
returns setof record
as
$$ select * from my_table $$
language sql
Run Code Online (Sandbox Code Playgroud)

或者我可以定义我的表类型,但手动重新创建技术上已经存在的是非常不切实际的.

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

维持是痛苦的.

那么,如何在不重新定义我想要返回的表中的每一列的情况下轻松返回结果集?

kli*_*lin 7

在Postgres中,表自动定义相应的类型:

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);
Run Code Online (Sandbox Code Playgroud)

语法比MS SQL Server中的语法更冗长,因为您可以使用多种语言之一创建函数,并且函数可能会重载.