ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小解决办法

1.今天写的存储过程在执行过程中,报如下错误。

exec PRO_T_008pro_update_add_delete(17,1,1,1,1,45.0,54.0,45.0,45.0,45.0,54.0,45.0,54.0,‘生产厂家‘,‘CYB10-2‘,54.0,45.0,25.0,1.0,45.0,25.0,1.0,45.0,25.0,1.0,45.0,1,4545.0,0,0,0,‘no‘);

begin PRO_T_008pro_update_add_delete(17,1,1,1,1,45.0,54.0,45.0,45.0,45.0,54.0,45.0,54.0,‘生产厂家‘,‘CYB10-2‘,54.0,45.0,25.0,1.0,45.0,25.0,1.0,45.0,25.0,1.0,45.0,1,4545.0,0,0,0,‘no‘); end;
 
ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在 "SMART.PRO_T_008PRO_UPDATE_ADD_DELETE", line 168
ORA-01422: 实际返回的行数超出请求的行数

ORA-06512: 在 line 2

解决办法:

存储过程中定义的变量值太小,加大它的范围即可。

p_dymbh number(38);
  p_bbh   number(38);
  p_upbbh number(38);

原本我设置的是10

过程中定义了一个变量 a varchar2(2); -- a的长度为2
而在赋值时 a := ‘123123‘; -- ‘123123‘的长度为6

这样就会出现你所遇到的问题,解决方法是找到变量,将其长度加大,注意:plsql中varchar2长度上限是4000

create or replace procedure PRO_T_008pro_update_add_delete(v_jbh     in number,
                                                           v_jslx    in number,
                                                           v_qtlx    in number,
                                                           v_sfpfcl  in number,
                                                           v_ccjzt   in number,
                                                           v_hsl     in number,
                                                           v_yy      in number,
                                                           v_ty      in number,
                                                           v_hy      in number,
                                                           v_dym     in number,
                                                           v_bg      in number,
                                                           v_jklw    in number,
                                                           v_scqyb   in number,
                                                           v_sccj    in  varchar2, 
                                                           v_cybxh   in  varchar2,
                                                           v_ygnj    in number,
                                                           v_yctgnj  in number,
                                                           v_yjgj    in number,
                                                           v_yjgjb   in number,
                                                           v_yjgcd   in number,
                                                           v_ejgj    in number,
                                                           v_ejgjb   in number,
                                                           v_ejgcd   in number,
                                                           v_sjgj    in number,
                                                           v_sjgjb   in number,
                                                           v_sjgcd   in number,
                                                           v_mdzt    in number,
                                                           v_clxs    in number,
                                                           v_bzgtbh  in number,
                                                           v_bzdntbh in number,
                                                           v_id      in number,
                                                           v_ids     in varchar2) is
  p_msg   varchar2(300) := ‘error‘;
  p_dymbh number(38);
  p_bbh   number(38);
  p_upbbh number(38);
begin
  If v_ids <> ‘no‘ then
    EXECUTE IMMEDIATE ‘ delete  from 
T_008_OUTPUTWELLPRODUCTION t  where  t.jlbh in (‘ ||
                      v_ids || ‘)‘;
    commit;
    p_msg := ‘删除成功‘;
  elsif v_id = 0 then
    --insert 动液面数据
    insert into T_011_DYNAMICLIQUIDLEVEL (jbh, dym) values (v_jbh, v_dym);
    select distinct w.jlbh as jlbh
      into p_dymbh
      from T_011_DYNAMICLIQUIDLEVEL w
     where w.jbh = v_jbh;
    --insert 泵信息
    select  distinct w.jlbh as jlbh
      into p_bbh
      from t_023_pump w
     where w.sccj = v_sccj
       and w.cybxh = v_cybxh;
  
    insert into T_008_OUTPUTWELLPRODUCTION
      (jbh,
       jslx,
       qtlx,
       sfpfcl,
       ccjzt,
       hsl,
       yy,
       ty,
       hy,
       bg,
       jklw,
       scqyb,
       ygnj,
       yctgnj,
       yjgj,
       yjgjb,
       yjgcd,
       ejgj,
       ejgjb,
       ejgcd,
       sjgj,
       sjgjb,
       sjgcd,
       mdzt,
       clxs,
       bzgtbh,
       bzdntbh,
       dymbh,
       bbh)
    values
      (v_jbh,
       v_jslx,
       v_qtlx,
       v_sfpfcl,
       v_ccjzt,
       v_hsl,
       v_yy,
       v_ty,
       v_hy,
       v_bg,
       v_jklw,
       v_scqyb,
       v_ygnj,
       v_yctgnj,
       v_yjgj,
       v_yjgjb,
       v_yjgcd,
       v_ejgj,
       v_ejgjb,
       v_ejgcd,
       v_sjgj,
       v_sjgjb,
       v_sjgcd,
       v_mdzt,
       v_clxs,
       v_bzgtbh,
       v_bzdntbh,
       p_dymbh,
       p_bbh);
    commit;
    p_msg := ‘添加成功‘;
  elsif v_id > 0 then
  --修改数据
    update T_011_DYNAMICLIQUIDLEVEL d
       set d.dym = v_dym
     where d.jbh = v_jbh;
     select distinct  w.jlbh as jlbh
      into p_upbbh
      from t_023_pump w
     where w.sccj = v_sccj
       and w.cybxh = v_cybxh;
     ---------------------------------------------------
     Update T_008_OUTPUTWELLPRODUCTION t
       set jbh     = v_jbh,
           jslx    = v_jslx,
           qtlx    = v_qtlx,
           sfpfcl  = v_sfpfcl,
           ccjzt   = v_ccjzt,
           hsl     = v_hsl,
           yy      = v_yy,
           ty      = v_ty,
           hy      = v_hy,
           bg      = v_bg,
           jklw    = v_jklw,
           scqyb   = v_scqyb,
           ygnj    = v_ygnj,
           yctgnj  = v_yctgnj,
           yjgj    = v_yjgj,
           yjgjb   = v_yjgjb,
           yjgcd   = v_yjgcd,
           ejgj    = v_ejgj,
           ejgjb   = v_ejgjb,
           ejgcd   = v_ejgcd,
           sjgj    = v_sjgj,
           sjgjb   = v_sjgjb,
           sjgcd   = v_sjgcd,
           mdzt    = v_mdzt,
           clxs    = v_clxs,
           bzgtbh  = v_bzgtbh,
           bzdntbh = v_bzdntbh,
           bbh=p_upbbh
     Where t.jlbh = v_id;
     
    commit;
    p_msg := ‘修改成功‘;
  end if;
  dbms_output.put_line(‘p_msg:‘ || p_msg);
Exception
  When Others Then
    p_msg := Sqlerrm || ‘,‘ || ‘操作失败‘;
    dbms_output.put_line(‘p_msg:‘ || p_msg);
end PRO_T_008pro_update_add_delete;

时间: 2024-08-27 15:18:47

ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小解决办法的相关文章

也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

场景: .Net程序调用Oracle方法 command.ExecuteNonQuery()执行存储过程;弹出如标题异常信息. 存储过程有4个输入参数,一个输出参数.一旦执行到给输出参数赋值的时候就报错.但在Plsql环境下调度,是正常的. 分析: 查阅各帖子,都说是变量长度不够,但设置也无果. 后来,怀疑是不是设置参数顺序有问题,调整,搞定. 解决: 存储过程中定义的参数,第一个为out,虽然在设置参数时,用了参数名,但好像没起什么作用.所以,把输出参数第一个设置,与定义顺序一致,就OK了.

Oracle ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

plsql报错: 处理办法(修改buffer Size大一点):

用PL/SQL Developer导出表数据的时候,窗口一闪而过解决办法

设置系统变量 变量名:ORACLE_HOME 变量值:为ORACLE安装bin目录的上一级目录,假如你的bin目录就在d:\oracle\bin 那么变量值就设置为d:\oracle

使用CLOB抛出数字或值错误异常

今天在调试某个问题的时候,由于使用了很多循环,我需要都打印出来,试图使用clob整体处理之后再打印. 最后抛出此异常:数字或值错误. 网友解释如下: $ oerr ora 650206502, 00000, "PL/SQL: numeric or value error%s"// *Cause: An arithmetic, numeric, string, conversion, or constraint error// occurred. For example, this er

【转】类型初始值设定项引发异常的解决办法

类型初始值设定项引发异常的解决办法 转自:小羊快跑1  http://www.cnblogs.com/SheepRunning/p/4452847.html 今天在调试代码的时候突然抛出了如下异常:"XORM.Database"的类型初始值设定项引发异常. 顿时感觉很突兀,平常的时候一点问题没有,为什么今天调试就出问题了呢?测试了一下,发现在数据处理层的一条实例化代码处出错: //获取类型的映射信息 MappingInfo mapInfo = xmlMapping.GetDataMap

SQL Server 2008 R2评估期已过的解决办法

某天打开SQL Server 2008 R2数据库,弹出如图一所示窗口. 图一 在网上查找了一些方法(链接1.链接2)结果都没有成功.这些方法都是通过图二的方式进入SQL2008配置工具中的安装中心. 图二 后面,我尝试着从安装程序进入SQL2008配置工具中的安装中心再进入维护界面,选择版本升级,如图三所示. 图三 检查升级规则,出现如图四所示的提示,重启计算机.此时安装提示重启计算机并重复上述操作即可.尽量不要只重启SQLServer服务 图四 在如图五中选择企业版并输入企业版序列号Ente

yum 安装时错误 Couldn&#39;t resolve host 解决办法

修改/etc/resolv.conf 添加:nameserver 8.8.8.8 yum 安装时错误 Couldn't resolve host 解决办法

VisualSVN错误 Cannot query proxy blanket解决办法

最近重新做了一下系统,在安装和使用svn过程中遇到了一些问题,记下备忘. 第一次安装好系统之后,安装VisualSVN遇到报错: Custom action InstallWMISchemaExcute failed: Cannot query proxy blanket: No such interface supported (0x80004002) 在网上上搜索了半天,也没找到解决办法.无奈之下又重新装了一遍系统,这次安装VisualSVN过程比较顺利,直接通过了,运行也没有问题.好景不长

Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPointerException 错误的集中原因及解决办法

上面那个问题刚解决,就又来一个问题~~~~ 错误信息字符串:java.lang.RuntimeException: Unable to start activity ComponentInfo{...}: java.lang.NullPointerException 网上有不少解决办法 一般都会在Activity  onCreate()方法里的setContentView(XXX)发生此错误,网上查阅了很多原因,大概有四种重要可能的原因: 原因一:xxx的错误,若为R.layout.main