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)
存储过程增加了对事务的支持:
CREATEORREPLACEPROCEDURE proc2() LANGUAGE plpgsql AS $$ BEGIN FOR i IN0..9LOOP INSERTINTO tbl(id, name) VALUES (i, 'value: '|| i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; ENDIF; ENDLOOP; 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)