scott@TEST1>declare
  2  n_a number;
  3  n_b number;
  4  n_c number;
  5  n_d number;
  6  c_line varchar2(20);
  7  begin
  8  c_line:='';
  9  n_a:=1;
 10  n_b:=1;
 11  n_c:=1;
 12  n_d:=4;
 13  for n_a in 1..5 loop
 14  for n_b in 1..n_d loop
 15     c_line:=c_line+' ';
 16  end loop;
 17  for n_c in 1..n_a loop
 18     c_line:=c_line+'* ';
 19  end loop;
 20  dbms_output.put_line(c_line);
 21  c_line:='';
 22  n_b:=1;
 23  n_c:=1;
 24  n_d:=n_d-1;
 25  end loop;
 26  end;
 27  /
declare
*
第 1 行出现错误:
ORA-06502: PL/SQL: 数字或值错误 :  字符到数值的转换错误
ORA-06512: 在 line 14

解决方案 »

  1.   

    c_line:=c_line+'* '; 
    ->
    c_line:=c_line||'* '; 
      

  2.   

    oracle不支持+,加号换成||
    declare
      n_a    number;
      n_b    number;
      n_c    number;
      n_d    number;
      c_line varchar2(20);
    begin
      c_line := '';
      n_a    := 1;
      n_b    := 1;
      n_c    := 1;
      n_d    := 4;
      for n_a in 1 .. 5 loop
        for n_b in 1 .. n_d loop
          c_line := c_line || ' ';
        end loop;
        for n_c in 1 .. n_a loop
          c_line := c_line || '* ';
        end loop;
        dbms_output.put_line(c_line);
        c_line := '';
        n_b    := 1;
        n_c    := 1;
        n_d    := n_d - 1;
      end loop;
    end;
      

  3.   

    SQL> ed
    已写入 file afiedt.buf  1  declare
      2    n_a number;
      3    n_b number;
      4    n_c number;
      5    n_d number;
      6    c_line varchar2(20);
      7    begin
      8    c_line:='';
      9    n_a:=1;
     10   n_b:=1;
     11   n_c:=1;
     12   n_d:=4;
     13   for n_a in 1..5 loop
     14   for n_b in 1..n_d loop
     15     c_line:=c_line || ' ';
     16   end loop;
     17   for n_c in 1..n_a loop
     18     c_line:=c_line || '* ';
     19   end loop;
     20   dbms_output.put_line('|' || c_line);
     21   c_line:='';
     22   n_b:=1;
     23   n_c:=1;
     24   n_d:=n_d-1;
     25   end loop;
     26*  end;
    SQL> /
    |    *
    |   * *
    |  * * *
    | * * * *
    |* * * * *PL/SQL 过程已成功完成。