ORA-06530错误:使用Schema级类型时引用未初始化复合类型求助
解决ORA-06530:引用未初始化复合类型错误
错误根源在于:你初始化了WS_RESPONSE_TABLE表类型变量,但每次执行v_res.extend后,表中新增的元素只是空的WS_RESPONSE对象引用,并没有实际创建对象实例。直接访问其valeur属性就会触发"引用未初始化复合类型"的ORA-06530错误。
修复方案
在v_res.extend之后,必须显式创建WS_RESPONSE对象实例并赋值给表的对应元素,之后才能对valeur属性进行赋值。
修改后的代码如下:
v_res WS_RESPONSE_TABLE := WS_RESPONSE_TABLE(); -- 其他变量声明保持不变 for i in 0..10 loop v_res.extend; -- 关键:初始化新增的WS_RESPONSE对象实例 v_res(v_res.last) := WS_RESPONSE(null); for j in 0..REGEXP_COUNT(P_KEYS, ':') loop v_key := REGEXP_SUBSTR(P_KEYS, '[^:]+', 1, j+1); v_data := apex_json.get_varchar2(p_path => REPLACE(v_key, '{}', '[%d]'), p_values => v_json, p0 => i); IF j = 0 THEN v_res(v_res.last).valeur := v_data; ELSE v_res(v_res.last).valeur := v_res(v_res.last).valeur || ' ' || v_data; END IF; end loop; end loop;
补充说明
- 表类型的
extend方法仅为表分配存储位置,不会自动初始化其中的对象元素 - 不管是提前扩展多行还是更换索引方式,只要没有实例化
WS_RESPONSE对象,访问其属性都会触发相同错误 - 初始化对象时可以传入
null作为初始值,后续再通过赋值更新valeur属性
内容的提问来源于stack exchange,提问作者Danis K
相关产品推荐
相关产品推荐

