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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:55:58