PL/SQL函数编译报ORA-00947值不足错误 自定义嵌套表返回类型问题咨询
ORA-00947错误产生原因
这个错误由两个核心的语法/类型匹配问题共同导致:
- 第一个问题:类型结构不匹配
你要赋值的变量rec是emp_high_sal_nt类型,它是元素为emp_high_sal_ot对象类型的嵌套表;但你SELECT语句返回的是三个独立的标量字段,没有封装为emp_high_sal_ot对象实例,Oracle无法将三个零散值直接映射为对象类型变量,会判定值的数量/结构不符合变量要求。 - 第二个问题:多行结果赋值方式错误
即使你完成了对象封装,普通的SELECT ... INTO语法仅支持单行结果的赋值,你查询的是所有薪资高于平均值的员工,结果是多行数据,需要用BULK COLLECT INTO语法才能将多行结果批量写入嵌套表变量。
修正后的函数代码
create or replace function get_highest_paid_emps return emp_high_sal_nt AS rec emp_high_sal_nt; avg_sal NUMBER; begin SELECT AVG(salary) INTO avg_sal FROM employees; SELECT emp_high_sal_ot(last_name || ' ' || first_name, phone_number, salary) BULK COLLECT INTO rec FROM employees WHERE salary > avg_sal; return rec; end; /
修正说明
- 用
emp_high_sal_ot(字段1,字段2,字段3)构造函数,将查询到的三个零散字段封装为emp_high_sal_ot对象实例 - 改用
BULK COLLECT INTO替代普通INTO,支持将多行对象结果批量写入嵌套表变量rec
内容的提问来源于stack exchange,提问作者EngineerSpock
相关产品推荐
相关产品推荐

