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

PostgreSQL调用存储过程提示参数类型不匹配错误如何解决?

PostgreSQL存储过程调用报错修复方案

错误核心原因

PostgreSQL通过存储过程名称+参数类型列表唯一识别存储过程,你遇到的42883错误是传入参数的类型、顺序和你定义的存储过程不匹配,具体问题:

  1. 存储过程定义的参数顺序为:IMEI bigint、iccid text、phonenumber bigint、apn text、"Operator" text、isesim boolean、ism2m boolean、mdi bigint、imsi integer,报错显示你实际执行的调用语句参数顺序完全错位,第一个参数传入了字符串类型的iccid,和定义的第一个参数bigint类型不匹配
  2. 两个boolean类型参数你传入了字符串'0',PostgreSQL无法自动将'0'字符串转换为boolean类型
  3. 存储过程内部存在潜在错误:length(IMEI)中IMEI是bigint数值类型,length()仅支持字符串类型输入,运行会报错

修复步骤

  • 第一步:修正存储过程内部逻辑,替换长度判断逻辑
CREATE OR REPLACE PROCEDURE "master_SIMs".simiccidlink1(IMEI bigint, iccid text, phonenumber bigint,  apn text, "Operator" text, isesim boolean, ism2m boolean, mdi bigint, imsi integer)
LANGUAGE 'plpgsql' AS 
$BODY$
begin 
-- 数值转字符串后再计算长度
if (length(IMEI::text) = 15) then
    if (master_packs.luhn_verify(IMEI) is True) then
        update "master_SIMs".list SET "ICCID" = iccid, "phoneNumber" = phonenumber, "APN" = apn, "operator" = "Operator", "isESIM" = isesim, "isM2M" = ism2m, "MDI" = mdi, "IMSI" = imsi where "serialNumber" = IMEI;   
    end if;
end if;
end;
$BODY$;
  • 第二步:调用时使用命名参数传参,避免顺序错误,同时匹配参数类型:
CALL "master_SIMs".simiccidlink1(
    IMEI := 352277818466409,
    iccid := 'iccid1',
    phonenumber := 8018466080,
    apn := 'apn1',
    "Operator" := 'operator1',
    isesim := false,
    ism2m := false,
    mdi := 123456789987653,
    imsi := 12354
);

SELECT * FROM "master_SIMs".list;

小提示:如果业务上1对应true、0对应false,直接替换上面的false为true即可,不要加引号。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:15:03