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

Oracle存储过程调用报错:参数数量或类型不匹配排查

问题分析与解决方案

这个报错的核心原因是BOOLEAN类型参数的传递方式错误,我们来一步步拆解问题并给出解决办法:

1. 不匹配的关键原因

你的存储过程中i_force_update_if_exists参数定义为BOOLEAN类型,但调用时你传入了数字1——这是Oracle SQL环境不支持的操作:

  • BOOLEAN是PL/SQL专属的数据类型,SQL语言本身并没有BOOLEAN类型,所以用exec(本质是SQL层调用PL/SQL)直接传数字1或0来代替布尔值是无效的,这就触发了参数类型不匹配的报错。

2. 正确的调用方式

你需要改用PL/SQL匿名块来调用这个存储过程,明确使用PL/SQL的布尔常量TRUE或FALSE:

BEGIN
  PA_PRJ_IMP.contract_boq_import(
    i_project_id => 'B3F4C5933008B348B753F95AA99B3678',
    i_master_list_version => 3,
    i_force_update_if_exists => TRUE, -- 用TRUE替代你原本想传的1,FALSE对应0
    i_user_id => 3920
  );
END;
/

3. 额外验证点(可选)

如果执行上述代码后仍有报错,可以检查i_project_id的RAW类型传递:

  • 虽然Oracle通常会自动将十六进制字符串转换为RAW,但如果遇到类型不匹配问题,可以用HEXTORAW函数显式转换:
    i_project_id => HEXTORAW('B3F4C5933008B348B753F95AA99B3678'),
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:25:34