存储过程

上一章我们学习了使用创建自定义函数。函数最大的缺点是,无法执行事务。存储过程解决了这个问题。

使用 CREATE PROCEDURE 语句创建存储过程,语法如下:

create [or replace] procedure procedure_name(parameter_list)
language plpgsql
as $$
declare
-- 声明变量
begin
-- 存储过程主体
end $$;

示例数据:

以下示例用于将指定金额从一个账户转账到另一个账户:

create or replace procedure transfer(
   sender int,
   receiver int, 
   amount dec
)
language plpgsql    
as $$
begin
    -- 从转账人账户里扣除金额
    update accounts 
    set balance = balance - amount 
    where id = sender;

    -- 给收款人账号增加金额
    update accounts 
    set balance = balance + amount 
    where id = receiver;

    commit;
end $$;
call transfer(1,2,1000);

删除存储过程

删除存储过程的语法:

drop procedure [if exists] procedure_name [(argument_list)]
[cascade | restrict]

删除存储过程与删除函数非常相似,包括如果发生重载,需要通过参数列表来显式指定要删除的重载版本。

要查看完整内容,请先登录