文章目录
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 sql
AS $$
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 plpgsql
AS $$
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();
查看结果:
PostgreSQL 11 新特性之存储过程
最新推荐文章于 2024-08-05 00:50:44 发布