我正在尝试像这样创建一个varchar数组表:
DECLARE
lna_poi_list fls_number_table := fls_number_table();
lsa_poi_list fls_varchar_table := fls_varchar_table();
ls_poi_list varchar;
BEGIN
FOR i IN 1..lna_poi_list.COUNT
LOOP
ls_poi_list := calling a function that returns a varchar and takes
lna_poi_list(i) as param;
lsa_poi_list.extend(ls_poi_list);
END LOOP
END;
在此之后我只想返回lsa_poi_list数组,但我得到了一些
字符到数字转换错误
任何想法都很有意义
答案 0 :(得分:1)
作为documented,extend
采用可选的数字参数:
EXTEND
方法有以下形式:
EXTEND
将一个null元素追加到集合中。
EXTEND(n)
将n个null元素追加到集合中。
EXTEND(n,i)
将第i个元素的n个副本附加到集合中。
要分配新元素,请扩展集合,然后指定值:
lsa_poi_list.extend;
lsa_poi_list(lsa_poi_list.COUNT) := ls_poi_list;
引用count
表示您正在填充数组中的最后一个(new,null)元素。
如果你总是为数字数组中的每个元素添加一个varhar(varchar2?)元素,你可以在循环之前调整一次,这样会更有效,例如:
DECLARE
lna_poi_list sys.odcinumberlist := sys.odcinumberlist();
lsa_poi_list sys.odcivarchar2list := sys.odcivarchar2list();
ls_poi_list varchar2(10);
BEGIN
lna_poi_list.extend(3);
lsa_poi_list.extend(lna_poi_list.COUNT);
FOR i IN 1..lna_poi_list.COUNT
LOOP
ls_poi_list := 'x'; -- from some function
lsa_poi_list(i) := ls_poi_list;
END LOOP;
END;
/
PL/SQL procedure successfully completed.