Postgresql 存储过程 return select 结果集
Postgresql stored procedure return select result set
在 Microsoft SQL 服务器中,我可以这样做:
create procedure my_procedure @argument1 int, @argument2 int
as
select *
from my_table
where ID > @argument1 and ID < @argument2
那 return 我 table 的所有列来自 my_table
.
最接近我在 postgresql 中所做的事情是:
create or replace function
get_test()
returns setof record
as
$$ select * from my_table $$
language sql
或者我可以定义我的 table 类型,但是手动重新创建技术上已经存在的内容是非常不切实际的。
create or replace function
get_agent_summary()
returns table (
column1 type, column2 type, ...
)
as
$$
begin
return query select col1, col2, ... from my_existing_table;
...
维护起来很痛苦。
那么,我怎样才能轻松 return 结果集而不重新定义我想要 return 的 table 中的每一列?
在Postgres中一个table自动定义了对应的类型:
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);
语法比 MS SQL Server 中的语法更冗长,因为您可以使用多种语言之一创建函数,并且函数可能会重载。
在 Microsoft SQL 服务器中,我可以这样做:
create procedure my_procedure @argument1 int, @argument2 int
as
select *
from my_table
where ID > @argument1 and ID < @argument2
那 return 我 table 的所有列来自 my_table
.
最接近我在 postgresql 中所做的事情是:
create or replace function
get_test()
returns setof record
as
$$ select * from my_table $$
language sql
或者我可以定义我的 table 类型,但是手动重新创建技术上已经存在的内容是非常不切实际的。
create or replace function
get_agent_summary()
returns table (
column1 type, column2 type, ...
)
as
$$
begin
return query select col1, col2, ... from my_existing_table;
...
维护起来很痛苦。
那么,我怎样才能轻松 return 结果集而不重新定义我想要 return 的 table 中的每一列?
在Postgres中一个table自动定义了对应的类型:
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);
语法比 MS SQL Server 中的语法更冗长,因为您可以使用多种语言之一创建函数,并且函数可能会重载。