PostgreSQL 11 新特性之存储过程

PostgreSQL 11 新特性之存储过程,第1张

概述PostgreSQL 11 增加了一个新的模式对象:存储过程(Stored Procedure)。存储过程和函数(Function)类似,不过它没有返回值。存储过程最大的优势就是能够支持事务控制,也就是可以在定义中使用 COMMIT 或者 ROLLBACK 语句。使用 CREATEALTERDROP PROCEDURE 命令创建修改删除存储过程,使用 CALL 命令调用存储过程。支持存储...

文章目录
Postgresql 11 增加了一个新的模式对象:存储过程(Stored Procedure)。存储过程和函数(Function)类似,不过它没有返回值。

存储过程最大的优势就是能够支持事务控制,也就是可以在定义中使用 COMMIT 或者 RolLBACK 语句。

使用 CREATE\ALTER\DROP PROCEDURE 命令创建\修改\删除存储过程,使用 CALL 命令调用存储过程。支持存储过程的服务器端编程语言包括:PL/pgsql、PL/Perl、PL/Python、PL/Tcl 以及 SPI 。

先来看一个简单示例:

CREATE table tbl(ID int, name text);CREATE PROCEDURE proc1(pID integer, pname text)LANGUAGE sqlAS $$INSERT INTO tbl(ID, name) VALUES (pID, pname);$$;

使用 CALL 语句调用存储过程:

CALL proc1(1, 'the first value');CALL proc1(pname=>'the second value', pID=>2);

查看一下结果:

SELECT * FROM tbl; ID |       name       ----+------------------  1 | the first value  2 | the second value(2 rows)

存储过程增加了对事务的支持:

CREATE OR REPLACE PROCEDURE proc2() LANGUAGE plpgsqlAS $$BEGIN FOR i IN 0..9 LOOP  INSERT INTO tbl(ID, name) VALUES (i, 'value: '|| i);  IF i % 2 = 0 THEN   COMMIT;  ELSE   RolLBACK;  END IF; END LOOP;END;$$ ;

调用存储过程 proc2,即使没有参数,仍然需要加上括号(()):

CALL proc2();

查看结果:

SELECT * FROM tbl; ID |       name       ----+------------------  1 | the first value  2 | the second value  0 | value: 0  2 | value: 2  4 | value: 4  6 | value: 6  8 | value: 8(7 rows)

只有ID 为偶数的记录成功插入表中,奇数都被 RolLBACK 语句回退了。

在 psql 中,使用 \df 命令查看存储过程:

\df                         List of functions Schema | name  | Result data type |   Argument data types   | Type --------+-------+------------------+-------------------------+------ public | add   | integer          | integer, integer        | func public | proc1 |                  | pID integer, pname text | proc public | proc2 |                  |                         | proc(3 rows)

对于存储过程,Type 的值为 proc。使用 \sf 命令可以查看存储过程的定义:

\sf proc1CREATE OR REPLACE PROCEDURE public.proc1(pID integer, pname text) LANGUAGE sqlAS $procedure$INSERT INTO tbl(ID, pname);$procedure$

PROCDEURE 目前还不支持自治事务(autonomous transaction)。

相关参考文档:
CREATE PROCEDURE
ALTER PROCEDURE
DROP PROCEDURE
CALL

总结

以上是内存溢出为你收集整理的PostgreSQL 11 新特性之存储过程全部内容,希望文章能够帮你解决PostgreSQL 11 新特性之存储过程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1151196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存