ORA-06502:PL/SQL:数字或者二值错误

  •  执行如下语句 遇到了 ORA-06502错误.
call BATCH_INSERT_A(10);
  • 问题分析

A表中没有数据,运行存储过程执行到Line14的时候,n_id变量值为NULL,故 Line15会出现类型错误.

  • 问题根本点
 select max(id) into n_id from A;

 for i in n_id+1 ..n_id+insertNo loop
  • 问题解决

在line14 Line15 之间添加 如下

if n_id is null then
    n_id :=0;
end if;

  • 表信息
  CREATE TABLE "SS_HR"."A"

   (  "NAME" CHAR(64) NOT NULL ENABLE,

    "ID" NUMBER(*,0) NOT NULL ENABLE,

     PRIMARY KEY ("ID")

 

   )    TABLESPACE "CICI" 

 

  • 存储过程
 1 create or replace procedure BATCH_INSERT_A(insertNo in integer) is

 2   /***************************************************************

 3   *NAME : BATCH_INSERT_TABLEA_P

 4   *PURPOSE : --向表A批量插入数据

 5   *IMPUT : -- 批量插入数据的数量

 6   *OUTPUT : -- N/A

 7   *Author : -- CICI

 8   *CreateDate : -- 2012、12、23

 9   *UpdateDate : --

10   ************************************************************/

11 

12 n_id  integer;

13 begin

14  select max(id) into n_id from A;

15  for i in n_id+1 ..n_id+insertNo loop

16  

17  dbms_output.put_line('NO is   '||i|| 'NOW');

18  dbms_output.put_line('NAME is   '||'a'||i|| 'NOW');

19      insert into

20             A(name,id )

21               values('a'||i,i);

22     end loop;

23  

24 end BATCH_INSERT_A;

 

 

你可能感兴趣的:(pl/sql)