create or replace function get_value(mid number) return number as
  t number;
  type w_type is table of number(4,2) index by binary_integer;
  w_array w_type;
  p1_array w_type;
  p2_array w_type;
  p3_array w_type;
  p4_array w_type;
  t_array w_type;
 i binary_integer :=0;
 j binary_integer :=0; begin
 for r in (select f_weight from factor where f_pre=10100)
 loop
 i:=i+1;
 w_array(i):=r.f_weight;
 end loop;
 for p in (select * from table(select f_saf from ppjz where m_id=mid))
  loop
  j:=j+1;
  p1_array(j):=p.p1;
  p2_array(j):=p.p2;
  p3_array(j):=p.p3;
  p4_array(j):=p.p4;
  end loop;
 for k in 1..4
  loop
  t_array(1):=w_array(k)*p1_array(k);
  t_array(2):=w_array(k)*p2_array(k);
  t_array(3):=w_array(k)*p3_array(k);
  t_array(4):=w_array(k)*p4_array(k);
  end loop;
  t:=t_array(1)*1.0+t_array(2)*0.8+t_array(3)*0.6+t_array(4)*0.5;
  return t;
  end get_value;

解决方案 »

  1.   

    create or replace function get_value(mid number) return number as
     t number;
     type w_type is table of number(4,2) index by binary_integer;
      w_array w_type;
      p1_array w_type;
      p2_array w_type;
      p3_array w_type;
      p4_array w_type;
      t_array w_type;
     i binary_integer :=0;
     j binary_integer :=0; begin for r in (select f_weight from factor where f_pre=10100)
     loop
     i:=i+1;
     w_array(i):=r.f_weight;
     end loop; for p in (select * from table(select f_saf from ppjz where m_id=mid))
      loop
      j:=j+1;
      p1_array(j):=p.p1;
      p2_array(j):=p.p2;
      p3_array(j):=p.p3;
      p4_array(j):=p.p4;
      end loop; for k in 1..4
      loop
      t_array(1):=w_array(k)*p1_array(k);
      t_array(2):=w_array(k)*p2_array(k);
      t_array(3):=w_array(k)*p3_array(k);
      t_array(4):=w_array(k)*p4_array(k);
      end loop;  t:=t_array(1)*1.0+t_array(2)*0.8+t_array(3)*0.6+t_array(4)*0.5;  return t;
      end;
    end;