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

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
);

关键说明

  1. 参数类型匹配:确保存储过程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;
    $$;
    
  2. 简化类型转换:par_asof_dt如果本身是可转换为timestamp的类型,直接用::timestamp简化转换即可;字符串常量'PB'、'OPS'可以直接传递,PostgreSQL会自动匹配varchar类型,无需额外cast()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:45:35