CALL 是一个用于调用过程的实用命令。
CALL 在 PostgreSQL 11 中添加。
变更历史
- PostgreSQL 11
- 已添加(提交 e4128ee7)
示例
使用以下表
postgres=# CREATE TABLE foo (id serial primary key, val INT); CREATE TABLE
postgres=# CREATE TABLE bar (id serial primary key, foo_id INT, bar_val INT); CREATE TABLE
一个简单的过程,用于插入一些数据
postgres=# CREATE OR REPLACE PROCEDURE insert_data(foo_val INT, bar_val INT)
LANGUAGE SQL
AS $$
WITH foo AS (
INSERT INTO foo VALUES (DEFAULT, foo_val) RETURNING id
)
INSERT INTO bar VALUES (DEFAULT, (SELECT foo.id FROM foo), bar_val);
$$;
CREATE PROCEDURE
postgres=# CALL insert_data(1, 2);
CALL
一个执行相同操作但返回数据的过程(但请注意,与函数不同,此输出不能与其他查询结合使用)
postgres=# CREATE OR REPLACE PROCEDURE insert_data_ret(INOUT foo_val INT, IN bar_val INT)
LANGUAGE SQL
AS $$
WITH foo AS (
INSERT INTO foo VALUES (DEFAULT, foo_val) RETURNING id
)
INSERT INTO bar VALUES (DEFAULT, (SELECT foo.id FROM foo), bar_val)
RETURNING id;
$$;
postgres=# CALL insert_data_ret(1, 2);
foo_val
---------
2
(1 row)
参考资料
- PostgreSQL documentation: CALL
分类
另请参阅
过程
