您的位置:首页 > 数据库

postgresql 存储过程返回结果集

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

//最先要求是只返回一个用户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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: