某一存储过程如下: 
b1 number;b2 number;b3 number;b4 number;b5 number;b6 number;b7 number;b8 number;b9 number;b10 number;b11 number;b12 number;b13 number;b14 number;b15 number;b16 number;b17 number;b18 number;b19 number;b20 number;b21 number;b22 number;b23 number;b24 number;b25 number;b26 number;b27 number;b28 number;b29 number;b30 number;b31 number;b32 number;b33 number;b34 number;b35 number;b36 number;b37 number;b38 number;b39 number;b40 number;b41 number;b42 number;b43 number;b44 number;b45 number;b46 number;b47 number;b48 number;b49 number;b50 number;b51 number;b52 number;b53 number;b54 number;b55 number;b56 number;b57 number;
 i number;
 jieguo1 
 type fudu_array is table of number;
 type jieguo_array is table of number;
 jieguo1 fudu_array;
 array1  jieguo_array;
 jieguo1:= jieguo_array(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,b30,b31,b32,b33,b34,b35,b36,b37,b38,b39,b40,b41,b42,b43,b44,b45,b46,b47,b48,b49,b50,b51,b52,b53,b54,b55,b56,b57);
 array1 := fudu_array(3, 3.5);
 
   i :=1;
    loop
          select count(1),min(t.a),max(t.b)  
                into  jieguo1(i),a,a             
                from table1 t
                where t.c=array1(i);
                i :=i+1;
          exit when i>2;
     end loop;
     
     为什么 b1,b2没有值?

解决方案 »

  1.   


    create or replace procedure t_p
    as
    i number;a number;b number;b1 number:=100;b2 number:=200;b3 number;b4 number;b5 number;b6 number;b7 number;b8 number;b9 number;b10 number;b11 number;b12 number;b13 number;b14 number;b15 number;b16 number;b17 number;b18 number;b19 number;b20 number;b21 number;b22 number;b23 number;b24 number;b25 number;b26 number;b27 number;b28 number;b29 number;b30 number;b31 number;b32 number;b33 number;b34 number;b35 number;b36 number;b37 number;b38 number;b39 number;b40 number;b41 number;b42 number;b43 number;b44 number;b45 number;b46 number;b47 number;b48 number;b49 number;b50 number;b51 number;b52 number;b53 number;b54 number;b55 number;b56 number;b57 number;
    type fudu_array is table of number;
    type jieguo_array is table of number;
    array1 fudu_array;
    jieguo1 jieguo_array;
    begin
    array1 := fudu_array(3,3.5);
    jieguo1:= jieguo_array(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,b30,b31,b32,b33,b34,b35,b36,b37,b38,b39,b40,b41,b42,b43,b44,b45,b46,b47,b48,b49,b50,b51,b52,b53,b54,b55,b56,b57);
    i :=1;
    loop
    select count(1),min(t.a),max(t.b) into jieguo1(i),a,b from table1 t where t.c=array1(i);
    i :=i+1;
    exit when i>2;
    end loop;
    dbms_output.put_line('第一列:'||jieguo1(1)||'第二列:'||jieguo1(2));--此处换成b1,b2是没值的,因为b1,b2在嵌套表中只作为形参,你更新表中的值,并不会更新形参(b1,b2)本身的值
    dbms_output.put_line('b1:'||b1||' b2:'||b2);--此处b1,b2还是原来的值100,200
    end;
    /
    /*
    SQL> exec t_p;
    第一列:2第二列:4                                                                
    b1:100 b2:200                                                                   PL/SQL 过程已成功完成。
    */
      

  2.   

    那就是b1,b2这样的形参没什么意义了,能不能不定义这么多形参呢?怎么处理?怎么让jieguo1 有57个长度?
      

  3.   


    --改为定义联合数组就可以了
    create or replace procedure t_p
    as
    i number;a number;b number;b1 number:=100;b2 number:=200;b3 number;b4 number;b5 number;b6 number;b7 number;b8 number;b9 number;b10 number;b11 number;b12 number;b13 number;b14 number;b15 number;b16 number;b17 number;b18 number;b19 number;b20 number;b21 number;b22 number;b23 number;b24 number;b25 number;b26 number;b27 number;b28 number;b29 number;b30 number;b31 number;b32 number;b33 number;b34 number;b35 number;b36 number;b37 number;b38 number;b39 number;b40 number;b41 number;b42 number;b43 number;b44 number;b45 number;b46 number;b47 number;b48 number;b49 number;b50 number;b51 number;b52 number;b53 number;b54 number;b55 number;b56 number;b57 number;
    type fudu_array is table of number;
    type jieguo_array is table of number index by binary_integer;--这个就不需要先初始化长度了
    array1 fudu_array;
    jieguo1 jieguo_array;
    begin
    array1 := fudu_array(3,3.5);
    jieguo1(57):='20';
    i :=1;
    loop
    select count(1),min(t.a),max(t.b) into jieguo1(i),a,b from table1 t where t.c=array1(i);
    i :=i+1;
    exit when i>2;
    end loop;
    dbms_output.put_line('第一列:'||jieguo1(1)||'第二列:'||jieguo1(2));--此处换成b1,b2是没值的,因为b1,b2在嵌套表中只作为形参,你更新表中的值,并不会更新形参(b1,b2)本身的值
    dbms_output.put_line('b1:'||b1||' b2:'||b2);--此处b1,b2还是原来的值100,200
    end;
    /
      

  4.   

     jieguo1(57):='20';
    这个是什么意思呀?
      

  5.   

    对一个元素赋值,就等于初始化了整个集合jieguo1(57):=null;