相关疑难解决方法(0)

如何在SQL查询中使用(func()).*语法避免多重函数的演绎?

上下文

当函数返回a TABLE或a时SETOF composite-type,如此示例函数:

CREATE FUNCTION func(n int) returns table(i int, j bigint) as $$
BEGIN
  RETURN QUERY select 1,n::bigint 
      union all select 2,n*n::bigint
      union all select 3,n*n*n::bigint;
END
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)

结果可以通过各种方法访问:

1)select * from func(3)将产生这些输出列:

 i | j 
---+---
 1 |  3
 2 |  9
 3 | 27

2)select func(3)将只生成一个ROW类型的输出列.

 func  
-------
 (1,3)
 (2,9)
 (3,27)

3)select (func(3)).*会产生#1:

 i | j 
---+---
 1 |  3
 2 |  9
 3 | …

postgresql user-defined-functions

14
推荐指数
1
解决办法
1461
查看次数

从函数PostgreSQL而不是记录返回多个列和行

我正在网上阅读关于PostgreSQL上的函数并返回结果在这个链接中:

  1. SQL函数return-type:TABLE vs SETOF记录
  2. 如何在Postgres sql函数中引用命名参数?
  3. http://www.postgresqltutorial.com/plpgsql-function-returns-a-table/

我写过这个函数:

create or replace function brand_hierarchy(account_value int)
  RETURNS table (topID INTEGER, accountId INTEGER, liveRowCount bigint,archiveRowCount bigint)
  AS
$BODY$
  SELECT * FROM my_client_numbers
where accountId  = coalesce($1,accountId);
$BODY$
LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

哪个工作并将结果返回到单列记录类型.请注意,可能会返回多行.

现在响应是:

record
(1172,1172,1011,0)
(1172,1412,10,40)
.....
Run Code Online (Sandbox Code Playgroud)

我希望我的结果不是作为记录而是作为多列

|---------|---------|------------|----------------|
| topID   |accountId|liveRowCount|archiveRowCount |
|---------|---------|------------|----------------|
| 1172    |1172     | 1011       |  0             |
| 1172    |1412     | 10         |  40            |
Run Code Online (Sandbox Code Playgroud)

有没有办法从PostgreSQL函数返回多个列

sql postgresql plpgsql postgresql-9.6

4
推荐指数
2
解决办法
1875
查看次数