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