使用varchar扩展varchar表

时间:2015-07-31 13:24:32

标签: oracle plsql

我正在尝试像这样创建一个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数组,但我得到了一些

  

字符到数字转换错误

任何想法都很有意义

1 个答案:

答案 0 :(得分:1)

作为documentedextend采用可选的数字参数:

  

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.