MSSQL带返回值输出参数的EXEC存储过程调用对应PostgreSQL等效写法是什么?
PostgreSQL 存储过程调用等效实现说明
基础对应关系说明
MSSQL 中@return_value是存储过程默认返回的整型执行状态值,PostgreSQL 没有完全一致的默认返回值设计,但可以通过函数或存储过程实现完全等效的效果,同时拿到执行状态和输出参数。
PostgreSQL 本身没有@前缀的变量语法约定,普通变量直接使用变量名即可,不需要加@前缀。如果确实要使用带@的变量名,需要用双引号包裹,不符合 PG 常规写法,不推荐。
等效写法实现
方案1:使用 FUNCTION 实现(最贴近 MSSQL 效果)
PG 函数支持显式定义返回值,同时支持 OUT 类型的输出参数,和 MSSQL 的场景匹配度最高。
- 函数定义示例:
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;
- 调用并获取返回值、输出参数:
-- 直接查询获取结果 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 参数承载状态值和输出参数:
- 存储过程定义示例:
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;
- 调用并获取值:
-- 调用后变量直接被赋值 CALL procedurename(return_value, 10, result);
内容的提问来源于stack exchange,提问作者Mircea
相关产品推荐
相关产品推荐

