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

PL/SQL创建记录集合并初始化时报错,请求技术支持

解决PL/SQL记录类型集合初始化的错误

嘿,我来帮你搞定这个问题!你遇到的PLS-00222错误核心原因很简单:PL/SQL里自定义的record类型没有默认的构造函数,你不能像调用函数那样用tab_name('ABC','abc')来创建记录实例——这种写法是给对象类型(Object Type)用的,不是record类型的用法。

下面给你两种可行的解决方案,按需选择:

方案1:改用对象类型(推荐,写法更简洁)

把record换成object类型,对象类型自带构造函数,完全适配你原来的初始化方式:

declare
  type tab_name is object (t_name varchar2(30), col_name varchar2(30));
  type tab_list is table of tab_name;
  table_names tab_list := tab_list(tab_name('ABC','abc'), tab_name('XYZ','xyz'));
begin
  for i in table_names.first..table_names.last loop
    dbms_output.put_line(table_names(i).t_name||'-'||table_names(i).col_name);
  end loop;
end;
/

方案2:坚持使用record类型,手动初始化记录

如果一定要用record类型,就得先声明记录变量,赋值后再添加到集合中:

declare
  type tab_name is record (t_name varchar2(30), col_name varchar2(30));
  type tab_list is table of tab_name;
  table_names tab_list := tab_list(); -- 先初始化空集合
  v_rec tab_name; -- 声明一个临时记录变量
begin
  -- 添加第一条记录
  v_rec.t_name := 'ABC';
  v_rec.col_name := 'abc';
  table_names.extend(); -- 扩展集合容量
  table_names(table_names.last) := v_rec;
  
  -- 添加第二条记录
  v_rec.t_name := 'XYZ';
  v_rec.col_name := 'xyz';
  table_names.extend();
  table_names(table_names.last) := v_rec;
  
  -- 遍历输出
  for i in table_names.first..table_names.last loop
    dbms_output.put_line(table_names(i).t_name||'-'||table_names(i).col_name);
  end loop;
end;
/

两种方案都能正常编译运行,输出你想要的ABC-abc和XYZ-xyz结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:27:04