ORA-22905:无法从非嵌套表项访问行
         说明,该错误可能产生于在使用table()函数的时候,传递的参数不是schema级别的table类型,而是直接在PL/SQL块中定义的table类型。
ORA-00932:数据类型不一致:应为UDT,但却获得NUMBER
         说明,UDT(User Define Type)是指用户自定义的类型,如定义了一个table或者Object。该错误主要产生在将Oracle基本类型放入用户自定义的类型而导致的类型不符,产生的错误。如,给一个自定义的类型名UserObject类型赋值2,就会产生这种错误。如语句:select  a  into n  from  bc_3  where b=1; 其中n是用户定义的一个Object类型而a是一个number类型。
ORA-01422:实际返回的行数超出请求的行数
         说明,错误意思已经很明显啦,比如语句:select  a  into b from bc_3  where b=1;条件b=1返回了多行,而b一次只能存放一个记录字段,所以就会报错。
PLS-00642:SQL语句中不允许使用本地收集类型
        
ORA-06531:引用未初始化的收集
         说明,该错误发生在向一个UDTtable类型中存放数据时,没有初始化导致。错误示例代码:

declare
 type numbers is table of number;
 n numbers;
begin
   n.extend;
   select a   into n(1) from bc_3 where b=1;
 
   for i in1 .. n.count loop
     dbms_output.put_line(n(i));
   end loop;
end;

 
解决办法1

declare
 type numbers is table of number;
 n numbers:= numbers();--这一步便对该table进行初始化,像java吧。
begin
   n.extend;
   select a   into n(1) from bc_3 where b=1;
 
   for i in1 .. n.count loop
     dbms_output.put_line(n(i));
   end loop;
end;

 
解决办法2:使用table下标自增长添加“index by binary_integer”,就不用初始化以及省去每次插入元素都extend的苦恼啦!

declare
 type numbers is table of number index by binary_integer;
 n numbers;
begin
   select a   into n(1) from bc_3 where b=1;
   select a   into n(2) from bc_3 where b=3;
  
   for i in1 .. n.count loop
     dbms_output.put_line(n(i));
   end loop;
 
end;
 

 
ORA-06533:下标超数量
         说明,可能产生在像一个table类型的变量中插入元素,而没有提前新增一条记录用于存放元素导致。解决办法是用extend,新增一行。
         :

declare
 type numbers is table of number;
 n    numbers := numbers();
begin
  n.extend;--这一句加上就不会出错啦
   selectinto n(1) from bc_3 where b=1;
 
   for i in1 .. n.count loop
     dbms_output.put_line(n(i));
   end loop;
end;