存储过程报ORA-01722无效数字错误
create or replace procedure p_fp_pjzxkchz(as_fpDjxh in varchar2,
as_swjgDm in varchar2,
as_ckDm in varchar2,
as_swryDm in varchar2) is
/*
存储过程说明:此存储过程用于对通过"回调"或"删除调拨单"进入票据中心库存的同类票(入库单价相同)进行汇总合并*/
ls_fpzlDm t_fp_fpdjmx.fpzl_dm%type;
ls_fpDm t_fp_fpdjmx.fp_dm%type;
ls_fpQshm t_fp_fpdjmx.fp_qshm%type;
ls_fpZzhm t_fp_fpdjmx.fp_zzhm%type;
ls_sldwDm t_fp_fpdjmx.sldw_dm%type;
ls_sl t_fp_fpdjmx.sl%type;
ls_sl1 t_fp_fpdjmx.sl%type;
ls_sl2 t_fp_fpdjmx.sl%type;
ls_dj1 t_fp_fpdjmx.dj%type;
ls_dj2 t_fp_fpdjmx.dj%type;
ls_dj t_fp_fpdjmx.dj%type;
qshm t_fp_fpdjmx.fp_qshm%type;
zzhm t_fp_fpdjmx.fp_zzhm%type;
cursor c_fpdjmx is
select * from t_fp_fpdjmx t where t.fpdj_xh = as_fpDjxh;
begin
--循环刚入库的票
for cur in c_fpdjmx loop
ls_fpzlDm := cur.fpzl_dm;
ls_fpDm := cur.fp_dm;
ls_fpQshm := cur.fp_qshm;
ls_fpZzhm := cur.fp_zzhm;
ls_sldwDm := cur.sldw_dm;
ls_sl := cur.sl;
--1查找库存中是否有与该号码相连的票,并将其合并
--1.1先找与该起始号码相连的
select sum(kc.sl)
into ls_sl1
from t_fp_swjgfpkc kc
where kc.swjg_dm = as_swjgDm
and kc.ck_dm = as_ckDm
and kc.swry_dm = as_swryDm
and kc.fpzl_dm = ls_fpzlDm
and kc.fp_dm = ls_fpDm
and kc.fp_zzhm = ls_fpQshm - 1
and kc.sldw_dm = ls_sldwDm;
--1.2找与该终止号码相连的
select sum(kc.sl)
into ls_sl2
from t_fp_swjgfpkc kc
where kc.swjg_dm = as_swjgDm
and kc.ck_dm = as_ckDm
and kc.swry_dm = as_swryDm
and kc.fpzl_dm = ls_fpzlDm
and kc.fp_dm = ls_fpDm
and kc.fp_qshm = ls_fpZzhm + 1
and kc.sldw_dm = ls_sldwDm;
--2分三段分别找出其入库价格
select nvl(djmx.dj, 0)
into ls_dj1
from t_fp_fprkd rkd, t_fp_fpdjmx djmx
where rkd.jsdw_dm = as_swjgDm
and rkd.jsck_dm = as_ckDm
and rkd.fprkd_xh = djmx.fpdj_xh
and djmx.fpdj_lx = '0'
and djmx.fpzl_dm = ls_fpzlDm
and djmx.fp_dm = ls_fpDm
and djmx.fp_qshm <= qshm
and djmx.fp_zzhm >= ls_fpQshm - 1;
指到这一行错误。
------解决方案--------------------
不知道...
隐式转换中出错的吧
最好保持数据类型的一致
比如这句可以改为djmx.fp_zzhm>=to_char(to_number(ls_fpqshm)-1)