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

MSSQL带返回值输出参数的EXEC存储过程调用对应PostgreSQL等效写法是什么?

PostgreSQL 存储过程调用等效实现说明

基础对应关系说明

MSSQL 中@return_value是存储过程默认返回的整型执行状态值,PostgreSQL 没有完全一致的默认返回值设计,但可以通过函数或存储过程实现完全等效的效果,同时拿到执行状态和输出参数。

PostgreSQL 本身没有@前缀的变量语法约定,普通变量直接使用变量名即可,不需要加@前缀。如果确实要使用带@的变量名,需要用双引号包裹,不符合 PG 常规写法,不推荐。


等效写法实现

方案1:使用 FUNCTION 实现(最贴近 MSSQL 效果)

PG 函数支持显式定义返回值,同时支持 OUT 类型的输出参数,和 MSSQL 的场景匹配度最高。

  1. 函数定义示例:
CREATE OR REPLACE FUNCTION procedurename(par1 int, OUT par2 int) 
RETURNS int AS $$
BEGIN
  -- 业务逻辑
  par2 := par1 * 2; -- 给输出参数赋值
  RETURN 0; -- 此处返回值对应 MSSQL 的 @return_value,一般用来表示执行状态
END;
$$ LANGUAGE plpgsql;
  1. 调用并获取返回值、输出参数:
-- 直接查询获取结果
SELECT * FROM procedurename(10);
-- 赋值给变量使用(PL/pgSQL 块内或支持变量的客户端中)
SELECT * INTO return_value, result FROM procedurename(10);

调用后return_value就能拿到函数返回的状态值,result拿到输出参数par2的取值,和 MSSQL 原写法效果完全一致。

方案2:使用 PROCEDURE 实现(PG 11及以上版本支持)

如果你用的是 PG 11 之后的版本,也可以用官方提供的存储过程语法实现,通过 INOUT 参数承载状态值和输出参数:

  1. 存储过程定义示例:
CREATE OR REPLACE PROCEDURE procedurename(INOUT return_value int, par1 int, INOUT par2 int)
AS $$
BEGIN
  -- 业务逻辑
  par2 := par1 * 2;
  return_value := 0; -- 承载原 @return_value 的状态值
END;
$$ LANGUAGE plpgsql;
  1. 调用并获取值:
-- 调用后变量直接被赋值
CALL procedurename(return_value, 10, result);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:45:05