gpt4 book ai didi

postgresql - postgresql中的存储过程

转载 作者:行者123 更新时间:2023-11-29 14:12:16 25 4
gpt4 key购买 nike

我不知道如何在 postgresql 中编写存储过程。我试着写一个,但我得到了错误的输出。

create or replace function getUserId() returns setof integer as 
$BODY$
Declare r integer;cnt integer;
BEGIN
for r in select distinct user_id from system_audit
loop
for cnt in select count(*) from system_audit where user_id=r
loop
return next cnt;
end loop;
return next r;
end loop;
return;
end;
$BODY$
language 'plpgsql';

当我通过键入检查输出时:-

select * from getUserId()

我得到这个作为输出:-

5817392010676191144131个2个2421320-12个24911671922个23370982291934523749103457351151020128167308961211110717271316142216178211707364993082251323571991488235661183594个923198165174212211491410577974161801345235915229723937197133144

输出是正确的但问题是这是作为一个单独的列出现的,它包含两列的输出——user_id 和 count。我想将我的输出视为两列,一列用于计数,另一列用于 user_id。请帮助我找到解决方案。

提前致谢!

最佳答案

如果你想得到一个真正的结果集,你需要将函数声明为returns table (...)

您的方法过于复杂,对于大表来说会非常慢。整个结果可以用一条SQL语句得到,不需要用游标循环:

select user_id, count(*)
from system_audit
group by user_id

这可以放入 SQL 函数中(注意:不是 plpgsql):

create or replace function getUserId() 
returns table (user_id integer, user_count integer)
as
$BODY$
select user_id, count(*)
from system_audit
group by user_id
$BODY$
language sql;

请注意,不推荐使用带引号的语言名称。你应该使用例如plpgsql 而不是 'plpgsql'sql 而不是 'sql'

关于postgresql - postgresql中的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13029188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com