我正在尝试将CTE的一列转换为数组。我继续“语法错误在或接近”,然后是“ret:= array(”。
我的目标是,我在下面示例中从a_function()
返回的表格是存储作为稍后在函数中引用的变量。但我找不到这样做的语法。因此,如果我可以使用其他东西,而不是使用CTE,那就可以很好地工作了。
注意:我在pgAdmin III中尝试这个。
create or replace function a_function()
--returns int[][] as
returns table(column1 int, column2 int) as
$body$
begin
return query
select 1,2;
end;
$body$
language 'plpgsql'
;
--select * from a_function();
create or replace function test_a_function()
returns void as
$body$
declare ret int[];
begin
with ret_cte(column1, column2) as (
select * from a_function()
)
ret := array(
select column1 from ret_cte
)
;
--raise notice '%', array_to_string(ret, ',');
end;
$body$
language 'plpgsql'
;
--select test_a_function();
答案 0 :(得分:0)
我正在尝试将CTE的一列转换为数组。我继续在"或附近获得"语法错误然后是" ret:= array("
您可以使用:
ret :=array(with ret_cte(column1, column2) as (
select * from a_function()
)
select column1 from ret_cte
);
<强> Rextester Demo 强>
答案 1 :(得分:0)
可以使用array_agg()函数构建和返回数组。例如,您的第二个函数可以使用SQL语言函数编写,该函数返回数组,如下所示:
model.frame(mpg ~ hp, data = mtcars)
model.frame(mtcars$mpg ~ mtcars$hp)
或者,您可以将数组分配给这样的变量:
create or replace function test_a_function()
returns int[] as
$body$
select array_agg(column1) from a_function();
$body$
language 'sql';