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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:06:08