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

2025-10-30 01:29:32

1、我们实现一个简单的存储过程

p_user_check(p_username varchar, p_passwd varchar) 

验证传入的密码是否正确.

传入参数为用户名p_username和用户密码p_passwd(数据库存储的应为加密过的密码),返回结果:

  0    - 验证成功,

  -1   - 用户不存在

  -2   - 密码错误

  -99 - 程序异常

2、psql进入测试数据库,创建测试schema和测试表users(用户表,包含用户名,用户密码),插入一条数据。

用户名: hehehehehe 密码:123 (仅测试用)

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

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

DROP FUNCTION IF EXISTS schema_a.user_check(varchar, varchar);

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

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

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

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

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

6、验证存储过程正确性

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢