这里创建一个求和的过程 proc_sum
create or replace procedure proc_sum
(
  v1 number,
  v2 number,
  sum out number
)
as
begin
  while(v1<=v2) loop <<my_loop>>
    sum:=sum+v1;
    v1:=v1+1;
  end loop my_loop; 
end;
/set serveroutput on--调用过程
declare
  a number;
  b number;
  c number;
begin
  a:=1;
  b:=10;
  proc_sum(a,b,c);
  dbms_output.put_line('1到10的和为:'||c);
end;
/以上PL-SQL块,是想写一个过程求:输入的两个数字和他们之间的数的和,比如这里调用时是求(1到10的和),运行时出错,似乎形参不能被赋值,请大虾们多多指教。  假如是我思路有错,请大侠们给贴一个,学习下。 Thank  you .

解决方案 »

  1.   

    sum out number
    只写不可读 即不要让sum出现的赋值语句的右边
    sum:=sum+v1;是错的……
      

  2.   

    create or replace procedure proc_sum
    (
      v1 number,
      v2 number,
      v_sum out number
    )
    as
      sum number := 0;
    begin
      while(v1<=v2) loop <<my_loop>>
      sum:=sum+v1;
      v1:=v1+1;
      end loop my_loop;
      v_sum := sum ; 
    end;或者create or replace procedure proc_sum
    (
      v1 in number,
      v2 in number,
      sum inout number
    )
    as
    begin
      sum := 0;
      while(v1<=v2) loop <<my_loop>>
      sum:=sum+v1;
      v1:=v1+1;
      end loop my_loop;
    end;
      

  3.   

    --method one
    create or replace procedure proc_sum
    (
      v1 number,
      v2 number,
      tot out NUMBER
    )
    AS
    i NUMBER;
    BEGIN
    tot:=0;
    i:=v1;
    WHILE(i<=v2) LOOP
    tot:=tot+i;
    i:=i+1;
    END LOOP; 
    end;
    /
    --method two
    create or replace procedure proc_sum
    (
      v1 number,
      v2 number,
      tot out NUMBER
    )
    as
    BEGIN
    tot:=0;
    FOR i IN v1..v2 LOOP 
      tot:=tot+i;
    END LOOP;  
    end;
    /
      

  4.   

    没太看,但是sum是关键字。肯定有问题的 
      

  5.   

    sum:=0; --需要初始化v1:=v1+1; --v1 默认为in, 值不能被改变, 应改为
    v1 in out number,