最近因為工作需要寫了個登錄校驗函數,話不多說,貼代碼,因為只是一個簡單的介紹用法,所以核心判斷我就全部去掉了。
//最先要求是只返回一個用戶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;