postgresql - 从 postgres 函数返回多个输出变量
问题描述
当我运行下面的函数时,我在两个输出值p_V_RESULT
和p_V_ERROR_MSG
. 可能是什么问题呢?
RAISE INFO
分配的显示值:
INFO: p_V_RESULT,T,p_V_ERROR_MSG
CREATE OR REPLACE FUNCTION public.CheckSessionFailed (
IN p_V_CHK_SESSION_ID bigint,
IN p_V_ERROR_COMMENT varchar(1000) ,
OUT p_V_RESULT char(1) ,
OUT p_V_ERROR_MSG varchar(1000)
)
AS $$
DECLARE
p_V_RESULT char(1) := 'T';
p_V_ERROR_MSG varchar(1000) := NULL;
errMsg text;
errState text;
errContext text;
r_rec record;
BEGIN
p_V_RESULT := 'T';
p_V_ERROR_MSG := '';
UPDATE CHECK_SESSION
SET SEVERITY_CD = 'FATAL',
SESSION_COMMENT = 'Check Session Failed: ' || COALESCE(p_V_ERROR_COMMENT, ''),
SESSION_END_DATE = NOW(),
UPDATED_STATUS_FLG = 'Y',
LAST_UPDATED = NOW()
WHERE CHK_SESSION_ID = p_V_CHK_SESSION_ID;
RAISE INFO 'p_V_RESULT,%,p_V_ERROR_MSG,%',p_V_RESULT,p_V_ERROR_MSG;
EXCEPTION
WHEN OTHERS THEN
GET STACKED DIAGNOSTICS
errState = RETURNED_SQLSTATE,
errMsg = MESSAGE_TEXT,
errContext = PG_EXCEPTION_CONTEXT;
p_V_ERROR_MSG := 'SQL State: '|| errState || ';Message ' || errMsg || '; Context '|| errContext;
p_V_RESULT := 'F';
END;
$$ LANGUAGE plpgsql;
解决方案
函数中的OUT
参数自动定义具有参数名称的变量。
您的明确声明
DECLARE
p_V_RESULT char(1) := 'T';
p_V_ERROR_MSG varchar(1000) := NULL;
覆盖和隐藏这些参数。所以你最终分配给错误的变量。
解决方案是删除这些第二个变量声明。
推荐阅读
- python - socket.SO_REUSEADDR 仍将连接置于 TIME_WAIT
- reactjs - 类型“ImageSourcePropType”上不存在属性“uri”
- javascript - 如何让 moment.tz() 从互联网而不是用户代理获取时间戳?PC 的内部时钟关闭 => 时间戳也关闭
- python - PyPlot:基于目标值的颜色散点图数据
- python - Numpy:数组的重复掩码(如果我们以前见过该值,则返回 True,否则返回 False)
- javascript - 防止 reactjs 中 axios 错误的默认事件
- sql - 按 1 分钟间隔分组操作链 sql BigQuery
- jsonb-api - 是否有等效于 JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY 的 Yasson/Json-b
- r - 为什么 trace() 函数在 R-Studio 中不起作用?
- flutter - 如何正确使用 onPress 中的异步功能