CREATE TYPE coords AS OBJECT(
  x   NUMBER,
  y   NUMBER
);
create table coordstab of coords;
insert into coordstab values(1,2);
insert into coordstab values(3,4);DECLARE
  TYPE coordstabtype IS TABLE OF coords;
  pairs coordstabtype;
BEGIN
  SELECT *
  BULK COLLECT INTO pairs
  FROM coordstab;
END;为什么提示没有足够的值呢

解决方案 »

  1.   

    在表类型后面加上一句INDEX BY PLS_INTEGER
      

  2.   

    TYPE coordstabtype IS TABLE OF coords INDEX BY PLS_INTEGER;
      

  3.   


    TYPE coordstabtype IS TABLE OF coords INDEX BY PLS_INTEGER;
      

  4.   


    CREATE TYPE coords AS OBJECT(
      x   NUMBER,
      y   NUMBER
    );
    create table coordstab of coords;
    insert into coordstab values(1,2);
    insert into coordstab values(3,4);DECLARE
      TYPE coordstabtype IS TABLE OF coords;
      pairs coordstabtype;  --这里得到的是一个对象数组。
    BEGIN
      SELECT coords(x,y)    --由于上面得到的是一个对象数组,要利用该对象类型的构造函数转换一下。
      BULK COLLECT INTO pairs
      FROM coordstab;
    END;--下面是修改后的结果:
    [TEST@ora10gr1#2009-12-27/22:20:58] SQL>set serveroutput on
    [TEST@ora10gr1#2009-12-27/22:20:58] SQL>DECLARE
      2    TYPE coordstabtype IS TABLE OF coords;
      3    pairs coordstabtype;
      4  BEGIN
      5    SELECT coords(x,y)
      6    BULK COLLECT INTO pairs
      7    FROM coordstab;
      8    for i in pairs.first..pairs.count loop
      9       dbms_output.put_line(pairs(i).x||pairs(i).y);
     10    end loop;
     11  END;
     12  /
    12
    34PL/SQL procedure successfully completed.