Postgresql 9.4.5
psql 9.4.5
CentOS PC
Terminal终端
文本编辑器(本文采用sublime_text)
我们实现一个简单的存储过程p_user_check(p_username varchar, p_passwd varchar) 验证传入的密码是否正确.传入参数为用户名p_username和用户密码p_passwd(数据库存储的应为加密过的密码),返回结果: 0 - 验证成功, -1 - 用户不存在 -2 - 密码错误 -99 - 程序异常
psql进入测试数据库,创建测试schema和测试表users(用户表,包含用户名,用户密码),插入一条数据。用户名: hehehehehe 密码:123 (仅测试用)
进入文本sublime_text,编写存储过程脚本。为保证脚本能多次运行而不影响数据库正常运行,如果在存储过程已存在的情况下先删除再建立。DROP FUNCTION IF EXISTS schema_a.user_check(varchar, varchar);
创建function语法官方说明见图
创建p_user_checkCREATE OR REPLACE FUNCTION schema_a.user_check(p_username varchar, p_password varchar)RETURNS int AS $$ -- $$需要后最后$$配对,可以任意取名,如$BODY$DECLARE -- 变量申明 _passwd varchar; _out_code int := -99; -- 申明时可赋初始值BEGIN -- 开始 SELECT password INTO _passwd FROM schema_a.users WHERE name = p_username; if found then if _passwd = p_password then _out_code := 0; else _out_code := -2; end if; else _out_code := -1; -- user not exists end if; return _out_code;EXCEPTION WHEN OTHERS THEN --异常处理 raise notice 'exception in user_check: %, %', SQLSTATE, SQLERRM; return _out_code;END; --结束$$LANGUAGE plpgsql STABLE SECURITY DEFINER;保存为 /home/kian.gao/Desktop/user_check.sql在psql中执行脚本 \i /home/kian.gao/Desktop/user_check.sql
如果认为本经验对您有所帮助,请点击下面【投票】支持一下小编!如果您想以后随时浏览请点击下面的【收藏】,如果您认为本经验能够帮助到您的朋友,请点击页面右下方的双箭头进行分享。