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

创建Oracle对象视图报ORA-00904: ID_NAME_COLL_TYPE无效标识符问题

问题解答

报错根因

你遇到的ORA-00904: "ID_NAME_COLL_TYPE": invalid identifier错误完全是由GROUP BY子句的错误写法导致的:

  • id_name_coll_type是你预先定义的自定义集合类型的名称,既不是源表customer_order_products的字段,也不是当前查询中定义的列别名,Oracle在解析GROUP BY子句时找不到对应的标识符,因此抛出无效标识错误。
  • 从业务逻辑上看,你的需求是按客户ID分组,聚合每个客户对应的所有产品为集合,完全不需要将类型名作为分组维度,原写法属于冗余的错误内容。

书籍示例无法运行的原因

这属于书籍编写或排版时的笔误,作者误将集合类型名写入了GROUP BY子句,原本的示例逻辑中不存在这个分组项。

正确的创建方式

你调整后的写法就是正确的,完整可运行的代码如下:

create or replace type id_name_type as object (
    id     integer, 
    name   varchar2(20 char)
);
/

create or replace type id_name_coll_type as table of id_name_type;
/

create or replace view customer_order_products_obj
as
select
    customer_id, 
    max(customer_name) as customer_name, 
    cast(
        collect(
            id_name_type(product_id, product_name)
            order by product_id
        ) as id_name_coll_type
    ) as product_coll
from customer_order_products
group by customer_id;

如果需要验证视图中的集合数据,可以通过TABLE()函数展开集合字段查看明细:

select t.customer_id, t.customer_name, p.id as product_id, p.name as product_name
from customer_order_products_obj t,
table(t.product_coll) p;

你此前运行成功的结果如下图:
运行结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:04