sql-server - Postgresql存储过程返回select结果集

标签 sql-server postgresql resultset

在 Microsoft SQL Server 中我可以做这样的事情:

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

这将返回包含 my_table 中所有列的表格。

我在 postgresql 中所做的最接近的事情是:

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

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

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

维护起来很痛苦。

那么,如何才能轻松返回结果集而不重新定义我要返回的表中的每一列?

最佳答案

在 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);

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

关于sql-server - Postgresql存储过程返回select结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41035386/

相关文章:

ruby-on-rails - database.yml 中的嵌入式 Ruby 未在 RubyMine 中解析

sql-server - SQL Server 中的字符串连接问题

Postgresql、multiXact 成员环绕保护现已启用

sql - 使用排列表来填补空白

postgresql - 更新插入更改行键(串行)?

java - 在 Java 中是否可以在单个 SQL 查询和结果集中检索不相关数据的表?

java - 获取 java.sql.SQLException : Operation not allowed after ResultSet closed

java - 如何快速将数据从 ResultSet 映射到某个 bean?

sql - tsql group by 获取最大长度的字母数字列值

php - 如何在php中将计算列添加到mysql查询结果中?