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;

 

 

posted @ 2013-01-03 00:06  王超_cc  阅读(325)  评论(0编辑  收藏  举报