PostgreSQL函数内调用存储过程赋值timestamp变量报错咨询
解决PostgreSQL存储过程调用时的赋值异常问题
你的问题出在PostgreSQL中CALL语句的用法错误——CALL不支持通过INTO关键字接收返回值,INTO仅适用于SELECT、VALUES这类查询语句。存储过程的输出/输入输出参数需要直接在调用参数列表中传递变量,而非在语句末尾加INTO。
修正后的调用代码
CALL CalculateDate( par_asof_dt::timestamp, 'PB'::varchar, 'OPS'::varchar, end_dt, par_msg_txt, 0 );
关键说明
- 参数类型匹配:确保存储过程
CalculateDate中对应end_dt的参数定义为INOUT或OUT类型。比如存储过程的定义应该类似:CREATE PROCEDURE CalculateDate( p_asof_dt timestamp, p_code1 varchar, p_code2 varchar, INOUT p_end_dt timestamp, -- 输入输出参数,用于传递计算后的值 p_msg_txt text, p_flag int ) LANGUAGE plpgsql AS $$ BEGIN -- 这里编写你的日期计算逻辑,最终将结果赋值给p_end_dt p_end_dt := /* 计算后的timestamp值 */; END; $$; - 简化类型转换:
par_asof_dt如果本身是可转换为timestamp的类型,直接用::timestamp简化转换即可;字符串常量'PB'、'OPS'可以直接传递,PostgreSQL会自动匹配varchar类型,无需额外cast()。
内容的提问来源于stack exchange,提问作者jack gell
相关产品推荐
相关产品推荐

