PostgreSQL的创建程序使用顾名思义的语句 创建新的存储过程。到目前为止,您已经学习了如何使用 create function 语句定义用户定义的函数。
用户定义函数的一个缺点是它们不能执行事务。换句话说,在用户定义的函数中,您不能启动事务,也不能提交或回滚它。 PostgreSQL 11 引入了支持事务的存储过程。要定义新的存储过程,请使用 create procedure 语句。
下面说明了 create procedure 语句的基本语法:
用法: create [or replace] procedure procedure_name(parameter_list) language plpgsql as $$ declare -- variable declaration begin -- stored procedure body end; $$
让我们分析以上语法:
- 首先,在后面指定存储过程的名称创建程序关键字。
- 其次,为存储过程定义参数。存储过程可以接受零个或多个参数。
- 三、指定plpgsql作为存储过程的过程语言。请注意,您可以为存储过程使用其他过程语言,例如 SQL、C 等。
- 最后,使用 dollar-quoted 字符串常量语法来定义存储过程的主体。
存储过程中的参数可以有 in 和 inout 模式。他们不能有输出模式。存储过程不返回值。您不能像这样在存储过程中使用带有值的 return 语句:
return expression;
但是,您可以使用返回没有的声明表达式立即停止存储过程:
return;
例:
我们将使用以下帐户演示表:
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('Raju', 10000); insert into accounts(name, balance) values('Nikhil', 10000);
以下查询将显示表数据:
select * from accounts;
结果如下图所示:
以下查询创建一个名为的存储过程转移将指定数量的资金从一个帐户转移到另一个帐户。
create or replace procedure transfer( sender int, receiver int, amount dec ) language plpgsql as $$ begin -- subtracting the amount from the sender's account update accounts set balance = balance - amount where id = sender; -- adding the amount to the receiver's account update accounts set balance = balance + amount where id = receiver; commit; end;$$
调用存储过程
要调用存储过程,请使用CALL声明如下:
call stored_procedure_name(argument_list);
例:
下面语句调用转移转移存储过程1, 000 美元从 Raju 的账户到 Nikhil 的账户:
call transfer(1, 2, 1000);
下面的语句验证了数据帐户转移后的表格:
SELECT * FROM accounts;
输出:
相关用法
- PostgreSQL CREATE DOMAIN用法及代码示例
- PostgreSQL CREATE TABLE用法及代码示例
- PostgreSQL CREATE SEQUENCE用法及代码示例
- PostgreSQL CREATE SCHEMA用法及代码示例
- PostgreSQL CREATE TRIGGER用法及代码示例
- PostgreSQL CREATE INDEX用法及代码示例
- PostgreSQL CREATE ROLE用法及代码示例
- PostgreSQL CREATE TABLESPACE用法及代码示例
注:本文由纯净天空筛选整理自RajuKumar19大神的英文原创作品 PostgreSQL – CREATE PROCEDURE。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。