//执行如下过程,提示“ORA-06531 引用未初始化的集合”“ORA-06512 在 line 9”,怎么修改?DECLARE
  TYPE Vs IS VARRAY(8) OF NUMBER;
  cursor cursor1 is select lx,wxyy,sum(sl) as sl from dlwxb group by lx,wxyy;
  s1 varchar(100);
  s2 varchar(100);
  s3 NUMBER;
  v vs;    
begin
  V(0):=0;V(1):=0;V(2):=0;V(3):=0;V(4):=0;V(5):=0;V(6):=0;V(7):=0;
  open cursor1;
  fetch cursor1 into s1,s2,s3;   
  while cursor1%found loop  
    IF ((S1 = 'DL') AND (S2='更改项目')) THEN V(0) := s3; END IF;
    IF ((S1 = 'GL') AND (S2='被盗修复')) THEN V(1) := s3; END IF;
    IF ((S1 = 'DL') AND (S2='维修整治')) THEN V(2) := s3; END IF;
    IF ((S1 = 'GL') AND (S2='更改项目')) THEN V(3) := s3; END IF;
    IF ((S1 = 'DL') AND (S2='故障处理')) THEN V(4) := s3; END IF;
    IF ((S1 = 'GL') AND (S2='维修整治')) THEN V(5) := s3; END IF;
    IF ((S1 = 'DL') AND (S2='被盗修复')) THEN V(6) := s3; END IF;
    IF ((S1 = 'GL') AND (S2='故障处理')) THEN V(7) := s3; END IF;
    fetch cursor1 into s1,s2,s3;
  end loop;
  close cursor1;
  S1 := TO_CHAR(V(0))||'/'||TO_CHAR(V(1))||'/'||TO_CHAR(V(2))||'/'||TO_CHAR(V(3))||'/';
  S1 := S1||TO_CHAR(V(4))||'/'||TO_CHAR(V(5))||'/'||TO_CHAR(V(6))||'/'||TO_CHAR(V(7))||'/';
end;

解决方案 »

  1.   

    v vs; 
    数组赋值语句,改成以下
     v vs:= Vs(0,1,2,3,4,5,6);
      

  2.   

    另外,oracle的数组下标是从1开始而不是0。
    v vs:=vs(1,2,3,4,5,6,7,8)
      

  3.   


    CREATE TABLE dlwxb(
    lx VARCHAR2(100),
    wxyy VARCHAR2(100),
    sl NUMBER(18,0) );INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','更改项目',100);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','更改项目',200);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','更改项目',300);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('GL','被盗修复',88);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('GL','被盗修复',76);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','维修整治',44);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','维修整治',25);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('GL','更改项目',21);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('GL','更改项目',15);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','故障处理',20);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','故障处理',50);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('GL','维修整治',9);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('GL','维修整治',7);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','被盗修复',17);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('DL','被盗修复',18);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('GL','故障处理',17);
    INSERT INTO dlwxb(lx,wxyy,sl) VALUES('GL','故障处理',18);----------------------------------------------------------------------------------------------
    DECLARE
      TYPE vs IS VARRAY(8) OF NUMBER;
      CURSOR cursor1 is SELECT lx,wxyy,sum(sl) as sl FROM dlwxb group by lx,wxyy;
      s1 varchar(200);
      s2 varchar(200);
      s3 NUMBER;
      v vs := vs(0,0,0,0,0,0,0,0);
    BEGIN
      open cursor1;
      fetch cursor1 into s1,s2,s3;   
      while cursor1%found loop 
        IF ((S1 = 'DL') AND (S2='更改项目')) THEN V(1) := s3; END IF;
        IF ((S1 = 'GL') AND (S2='被盗修复')) THEN V(2) := s3; END IF;
        IF ((S1 = 'DL') AND (S2='维修整治')) THEN V(3) := s3; END IF;
        IF ((S1 = 'GL') AND (S2='更改项目')) THEN V(4) := s3; END IF;
        IF ((S1 = 'DL') AND (S2='故障处理')) THEN V(5) := s3; END IF;
        IF ((S1 = 'GL') AND (S2='维修整治')) THEN V(6) := s3; END IF;
        IF ((S1 = 'DL') AND (S2='被盗修复')) THEN V(7) := s3; END IF;
        IF ((S1 = 'GL') AND (S2='故障处理')) THEN V(8) := s3; END IF;
        fetch cursor1 into s1,s2,s3;
      end loop;
      close cursor1;
      S1 := TO_CHAR(V(1))||'/'||TO_CHAR(V(2))||'/'||TO_CHAR(V(3))||'/'||TO_CHAR(V(4))||'/';
      S1 := S1||TO_CHAR(V(5))||'/'||TO_CHAR(V(6))||'/'||TO_CHAR(V(7))||'/'||TO_CHAR(V(8))||'/';
      dbms_output.put_line(S1);
    END;
    /