多语言展示
当前在线:1273今日阅读:23今日分享:31

Postgresql使用PL/pgSQL语言建立存储过程

PL/pgSQL是应用于Postgresql数据库的过程化SQL语言,是对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以pl/pgsql就是把数据操作和查询语句组织在pl/pgsql代码的过程性单元中,可以执行逻辑判断、循环等操作以实现复杂功能。PG中存储过程关键字也是function,不像oracle中有procedure。
工具/原料
1

Postgresql 9.4.5

2

psql 9.4.5

3

CentOS PC

4

Terminal终端

5

文本编辑器(本文采用sublime_text)

方法/步骤
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_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

注意事项
1

如果认为本经验对您有所帮助,请点击下面【投票】支持一下小编!如果您想以后随时浏览请点击下面的【收藏】,如果您认为本经验能够帮助到您的朋友,请点击页面右下方的双箭头进行分享。

推荐信息