【发布时间】:2021-11-05 00:24:48
【问题描述】:
当我运行下面的函数时,我在两个输出值 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;
【问题讨论】:
-
select * from CheckSessionFailed (1::bigint, 'pano'::varchar(1000));
-
当我从 DECLARE 部分删除 p_V_RESULT 和 p_V_ERROR_MSG 时,它起作用了
-
啊,是的。我没有看到双重定义。
标签: postgresql return plpgsql