postgresql 存储过程返回结果集

最近因为工作需要写了个登录校验函数,话不多说,贴代码,因为只是一个简单的介绍用法,所以核心判断我就全部去掉了。

//最先要求是只返回一个用户id,于是简单的returns integer就可以完成。

 

CREATE OR REPLACE FUNCTION validate_user()
RETURNS integer AS
$BODY$
DECLARE i integer;
begin

return i;

end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

 

-- 后面更改了需求,要求返回表中一行的值,所以我就使用了游标,不过后获取游标的值太过麻烦,所以又修改了一次。

CREATE OR REPLACE FUNCTION validate_user()
RETURNS refcursor AS
$BODY$
declare user_list refcursor;
begin 
open user_list for select * from tb_user where email = usernameTe and state=1;
return user_list;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

 

 

 //下面是标准的pg/sql的写法 

 

CREATE OR REPLACE FUNCTION validate_user()
RETURNS setof tb_user AS
$BODY$
declare user_list tb_user;
begin 
for user_list in select * from tb_user where email = usernameTe and userpwd= passwordTe and state=1 loop 
return next user_list;
end loop;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

 

 

//还有一种写法是直接select,这里就不贴出来了,判断成功之后直接使用select语句就行,无需返回值。 

 

//后面需要增加一个参数返回判断情况,所以我这里使用了out输出,也是比较灵活。输出参数前缀加T是因为我所使用的psql版本变量不可以冲突。

--output参数使用

CREATE OR REPLACE FUNCTION validate_user(usernamete text, passwordte text,out Tuserid int,out Tpassword text,out Tusername text,out Tcompid int,out Trole int,out Terrcode int)
AS
$BODY$
begin 
select userid,userpwd,username,compid,role,0 from tb_user where email = usernamete and state=1 into $3,$4,$5,$6,$7,$8;
return;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100; 

 


 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。