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

PL/SQL存储过程调用报错:参数数量/类型不匹配及语句被忽略

解决PL/SQL存储过程调用的参数不匹配错误

嘿,这个错误的根源很清晰——你调用存储过程时没有传入它要求的参数!

咱们来拆解一下问题:

  • 你的存储过程runCheck明确定义了两个IN OUT类型的参数:p_runId(数值型)和p_runCheck(FSS_RUN_TABLE的行类型)
  • 但你的调用语句Begin PKG_FSS_SETTLEMENT.runCheck; End;完全没有传递任何参数,PL/SQL找不到对应的无参重载版本,自然就抛出了"wrong number or types of arguments"和"Statement ignored"错误。

正确的调用方式

你需要先声明匹配参数类型的变量,再传入存储过程:

DECLARE
    v_runId NUMBER := 0; -- 初始化数值变量匹配p_runId
    v_runCheck FSS_RUN_TABLE%ROWTYPE; -- 声明行类型变量匹配p_runCheck
BEGIN
    PKG_FSS_SETTLEMENT.runCheck(v_runId, v_runCheck);
    
    -- 如果需要查看返回的参数值,可添加输出语句(需提前开启DBMS_OUTPUT)
    IF v_runCheck.RUNID IS NOT NULL THEN
        DBMS_OUTPUT.PUT_LINE('查询到的成功运行记录ID: ' || v_runCheck.RUNID);
    ELSE
        DBMS_OUTPUT.PUT_LINE('新生成的运行ID: ' || v_runId);
    END IF;
END;
/

额外的优化建议

  1. 调整参数类型语义:如果p_runId只是用来输出新生成的序列值,p_runCheck只是用来返回查询到的行数据,建议把它们改成OUT类型,这样调用时不需要初始化变量,语义也更明确:
    Procedure runCheck(p_runId out number, p_runCheck out FSS_RUN_TABLE%rowtype) is
    -- 原逻辑保持不变
    
  2. 完善存储过程逻辑:当触发NO_DATA_FOUND异常插入新记录后,p_runCheck还是空值。如果业务需要调用方拿到这条新插入的记录,可以在插入后补充查询:
    Exception when NO_DATA_FOUND then
        p_runId := RUNLOG_SEQ.NEXTVAL;
        insert into FSS_RUN_TABLE (RUNID, RUNSTART, RUNEND, RUNOUTCOME, REMARKS)
        values (p_runId, sysdate, null, null, 'RUN START');
        -- 新增:把刚插入的记录赋值给p_runCheck
        select * into p_runCheck from FSS_RUN_TABLE where RUNID = p_runId;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:42:20