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
相关产品推荐
相关产品推荐

