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
相关产品推荐
相关产品推荐

