Oracle PL/SQL集合赋值报错PLS-00382:表达式类型错误
解决PL/SQL集合类型不匹配错误(PLS-00382)
问题根源
你定义的typ_int是**rec_int记录类型的表**,集合中的每个元素都是包含integer类型字段i的记录对象,而非直接的整数。直接给int_array(1)赋值整数1,必然触发类型不匹配错误。
两种修复方案
方案1:直接构造记录实例赋值
通过记录类型名显式构造符合要求的记录对象:
function test_randset return pls_integer is int_array typ_int; ret pls_integer; begin -- 构造rec_int类型的记录并赋值 int_array(1) := rec_int(i => 1); ret := randset(int_array); return ret; end;
方案2:通过记录变量中转赋值
如果需要复用记录结构,可以先声明记录变量再赋值:
function test_randset return pls_integer is int_array typ_int; temp_rec rec_int; -- 声明记录类型变量 ret pls_integer; begin temp_rec.i := 1; -- 给记录的字段赋值 int_array(1) := temp_rec; -- 将记录变量赋值给集合元素 ret := randset(int_array); return ret; end;
额外提示
如果你的集合是未初始化的嵌套表,直接使用下标int_array(1)可能触发ORA-06533: Subscript beyond count错误,建议先初始化并扩展集合:
int_array := typ_int(); -- 初始化空集合 int_array.extend(); -- 扩展一个元素位置 int_array(1) := rec_int(i => 1);
内容的提问来源于stack exchange,提问作者Dmytro
相关产品推荐
相关产品推荐

