You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在psql中调用带有INOUT参数的PostgreSQL存储过程

psql调用该存储过程的实现方案

完全可以在psql中实现和Oracle sql-plus完全等价的需求,不存在功能缺失问题

方法1:使用PL/pgSQL匿名块调用(和Oracle写法逻辑一致)

该写法和你熟悉的Oracle sql-plus匿名块逻辑几乎一致,仅语法细节有差异,执行以下SQL即可,psql默认会打印输出内容:

DO $$
DECLARE
    a_err varchar(200);
    a_id int;
BEGIN
    -- 调用存储过程需要用CALL关键字
    CALL dt_test.integer_insert(a_id, 13, 'A prime example', a_err);
    -- 等价于Oracle的dbms_output.put_line,%为占位符自动拼接变量
    RAISE NOTICE 'The new ID is: %', a_id;
END $$;

方法2:直接使用CALL命令调用(更简便)

如果不需要额外的逻辑处理,可直接调用存储过程,INOUT参数传入NULL即可,执行后会直接返回结果集展示a_id和a_err的取值:

CALL dt_test.integer_insert(NULL, 13, 'A prime example', NULL);

注意事项

  • 该写法仅支持PostgreSQL 11及以上版本,因为PROCEDURE对象是PostgreSQL 11版本首次引入的功能,更早版本需要将存储过程改写为函数实现,逻辑完全一致。
  • 调用前需确保当前用户拥有dt_test模式的访问权限,以及对应存储过程的执行权限,权限不足时可使用管理员账号执行赋权:GRANT EXECUTE ON PROCEDURE dt_test.integer_insert(int, integer, varchar, varchar) TO 你的用户名;

内容的提问来源于stack exchange,提问作者gsiems

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:36:07