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

Oracle 11g调用PRINT存储过程出现PLS-00306错误求助

解决PLS-00306: 调用'PRINT'时参数数量或类型错误的问题

错误原因

触发PLS-00306的核心问题是FOR循环重定义了同名变量的类型:

  • 你在DECLARE块声明的v_string是VARCHAR2类型,但在FOR v_string IN (...)循环中,这个v_string被重新定义为游标记录类型(对应查询返回的整行数据),不再是字符串。
  • 调用print(v_string)时,实际传递的是游标记录对象,而你的print存储过程仅接受VARCHAR2类型参数,因此出现类型不匹配错误。

修正方案

方案1:修改循环变量名,避免重名

将FOR循环的变量名改为与声明的字符串变量不同的名称,传递记录中的full_name字段:

DECLARE
  v_string VARCHAR2(64);
BEGIN
    FOR emp_rec IN (SELECT DISTINCT full_name
                            FROM  employees) LOOP
        print (emp_rec.full_name);
    END LOOP;
END;
//

方案2:删除冗余变量声明

既然DECLARE块中的v_string未被实际使用,可直接删除,直接传递循环记录的字段:

BEGIN
    FOR emp_rec IN (SELECT DISTINCT full_name
                            FROM  employees) LOOP
        print (emp_rec.full_name);
    END LOOP;
END;
//

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:46:00