Postgresql使用PL/pgSQL语言建立存储过程
1、我们实现一个简单的存储过程
p_user_check(p_username varchar, p_passwd varchar)
验证传入的密码是否正确.
传入参数为用户名p_username和用户密码p_passwd(数据库存储的应为加密过的密码),返回结果:
0 - 验证成功,
-1 - 用户不存在
-2 - 密码错误
-99 - 程序异常
2、psql进入测试数据库,创建测试schema和测试表users(用户表,包含用户名,用户密码),插入一条数据。
用户名: hehehehehe 密码:123 (仅测试用)

3、进入文本sublime_text,编写存储过程脚本。为保证脚本能多次运行而不影响数据库正常运行,如果在存储过程已存在的情况下先删除再建立。
DROP FUNCTION IF EXISTS schema_a.user_check(varchar, varchar);

4、创建function语法官方说明见图

5、创建p_user_check
CREATE 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

6、验证存储过程正确性
