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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM