本章我们将讨论存储过程。
创建存储过程
create [or replace] procedure procedure_name(parameter_list)
language plpgsql
as $$
declare
-- 声明变量
begin
-- 存储过程主体
end $$;
- 存储过程的参数模式只能是
IN
和INOUT
,而不能是OUT
- 存储过程不能返回值
- 即不能使用
RETURN 表达式;
- 但可以使用不带表达式的
RETURN;
来停止存储过程 - 如要从存储过程中返回值,可以使用
INOUT
模式的参数
- 即不能使用
示例数据:
drop table if exists accounts;
create table accounts (
id int generated by default as identity,
name varchar(100) not null,
balance dec(15,2) not null,
primary key(id)
);
insert into accounts(name,balance)
values('Bob',10000);
insert into accounts(name,balance)
values('Alice',10000);
以下示例用于将指定金额从一个账户转账到另一个账户:
调用存储过程:
call transfer(1,2,1000);
删除存储过程
删除存储过程的语法:
drop procedure [if exists] procedure_name [(argument_list)]
[cascade | restrict]
删除存储过程与删除函数非常相似,包括如果发生重载,需要通过参数列表来显式指定要删除的重载版本。