Oracle嵌套表创建报错ORA-02320/ORA-22913问题求助
问题排查与解决方案
错误原因
触发ORA-22913错误的核心原因是:你定义的product_type对象类型中包含了VarcharList类型的嵌套表属性producttypes,而在创建主表ordersv3时,仅为外层嵌套表order_items指定了存储表,未为内层的producttypes嵌套表属性指定对应的存储表。Oracle要求所有层级的嵌套表都必须明确指定存储表,否则会创建失败。
修正步骤
1. 确保基础嵌套表类型VarcharList已定义
如果之前未定义VarcharList,先执行以下语句:
CREATE OR REPLACE TYPE VarcharList AS TABLE OF VARCHAR2(100);
2. 修改主表创建语句,为内层嵌套表指定存储表
更新ordersv3的创建语句,在外层嵌套表的存储表定义中嵌套指定内层嵌套表的存储表:
CREATE TABLE ordersv3 ( order_id NUMBER PRIMARY KEY, customer_id NUMBER, order_items order_items_table ) NESTED TABLE order_items STORE AS order_items_ntttt ( -- 为product对象中的producttypes嵌套表指定存储表 NESTED TABLE product.producttypes STORE AS product_types_nt );
3. 优化建议(非强制但推荐)
product_type中的list_price字段使用VARCHAR2(100)存储价格不符合数据类型规范,建议改为NUMBER类型:
CREATE OR REPLACE TYPE product_type AS OBJECT ( product_id NUMBER, product_name VARCHAR2(100), category_name VARCHAR2(100), producttypes VarcharList, list_price NUMBER -- 替换原VARCHAR2类型 );
内容的提问来源于stack exchange,提问作者aimilios papakonstantinou
相关产品推荐
相关产品推荐

