CREATE OR REPLACE PROCEDURE tz_fc(rq1 IN VARCHAR2,czybm IN VARCHAR2)
AS
spbm2 T_pdmx.spbm%TYPE;
ck_sl2 number;
resault number;
bmbm2 t_pdmx.bmbm%type;
sl2 T_pdmx.sl%TYPE;
kcsl2 T_pdmx.kcsl%TYPE;
CURSOR pd IS
SELECT spbm,sl,kcsl
FROM t_pdmx
WHERE rq=rq1 and clbz='0'
ORDER BY spbm
FOR UPDATE OF clbz,tzr,tzrq;
BEGIN
OPEN pd;
LOOP
spbm2:='';
kcsl2:='';
sl2:='';
bmbm2:='';
FETCH fc INTO spbm2,kcsl2,sl2,bmbm2;
EXIT WHEN fc%NOTFOUND;
select sum(sl) sl into ck_sl2 from t_ckmx where spbm=spbm2;
resault:=sl2-kcsl2+ck_sl2;
IF resault>=0 THEN
UPDATE T_pdmx
SET clbz='z',
xgr=czybm,
xgrq=sysdate
WHERE CURRENT OF pd;
insert into t_ykmx(rq,dh,lb,ly,bmbm,spbm,sl,lrr,lrrq,clbz) values(rq1,nvl(max(nvl(dh,0)),0)+1,'y','0',bmbm2,spbm2,resault,czybm,sysdate,'0');
else
update t_pdmx
set clbz='z',
xgr=czybm,
xgrq=sysdate
WHERE CURRENT OF pd;
insert into t_ykmx(rq,dh,lb,ly,bmbm,spbm,sl,lrr,lrrq,clbz) values(rq1,nvl(max(nvl(dh,0)),0)+1,'k','0',bmbm2,spbm2,abs(resault),czybm,sysdate,'0'); END IF;
EXIT;
END LOOP;
CLOSE pd;
COMMIT;
EXCEPTION WHEN OTHERS THEN NULL;
END;帮忙看看错在哪里呀!!!!!!!!!!!!
--盘点明细
drop table t_pdmx;
create table t_pdmx
(
rq varchar2(8) not null, --盘点日期
dh number not null, --盘点单号
bmbm varchar2(2) not null, --部门编码
spbm varchar2(6) not null, --商品编码
kcsl number(14,4) not null, --库存数量
sl number(14,4), --盘点数量(实际盘点数)
dwbm varchar2(5), --单位编码
jyfs varchar2(1), --商品属性
dlm varchar2(2), --大类码
lrr varchar2(10) not null, --录入操作员编码
lrrq date default sysdate not null, --录入日期
xgr varchar2(10), --修改操作员编码
xgrq date, --修改日期
tzr varchar2(10), --调整操作员编码
tzrq date, --调整日期
clbz varchar2(1) default '0' not null, --处理标志(0-未生成盈亏,Z-已生成盈亏)
fdmc varchar2(20) --分店名称
)
/--盈亏明细
drop table t_ykmx;
create table t_ykmx
(
rq varchar2(8) not null, --日期(业务发生日期)
dh number not null, --单号(业务单据号)
lb varchar2(1), --类别(Y-盘赢,K-盘亏)
ly varchar2(1) not null, --盈亏来源(0-机器自动,1-手工录入盈亏)
bmbm varchar2(2), --部门编码
spbm varchar2(6) not null, --商品编码
js number(14,4), --件数
mjsl number(14,4), --每件数量
sl number(14,4) not null, --数量(业务数量)
bz varchar2(100), --备注
dwbm varchar2(5), --单位编码
jyfs varchar2(1), --经营方式(商品属性)
jhjg number(14,4), --进货价格
jhbh number, --进货编号(批次号)
dlm varchar2(2), --大类码
zzsl number(3), --增值税率
scrq varchar2(8), --生产日期(保质报警用)
lrr varchar2(10) not null, --录入操作员编码
lrrq date default sysdate not null, --录入日期
xgr varchar2(10), --修改操作员编码
xgrq date, --修改日期
shr varchar2(10), --审核人
shrq date, --修改日期
tzr varchar2(10), --调整操作员编码
tzrq date, --调整日期
clbz varchar2(1) default '0' not null, --处理标志(0-未调库存,Z-已调库存)
dycs number default 0, --打印次数
fdmc varchar2(20) --分店名称
)
/
AS
spbm2 T_pdmx.spbm%TYPE;
ck_sl2 number;
resault number;
bmbm2 t_pdmx.bmbm%type;
sl2 T_pdmx.sl%TYPE;
kcsl2 T_pdmx.kcsl%TYPE;
CURSOR pd IS
SELECT spbm,sl,kcsl
FROM t_pdmx
WHERE rq=rq1 and clbz='0'
ORDER BY spbm
FOR UPDATE OF clbz,tzr,tzrq;
BEGIN
OPEN pd;
LOOP
spbm2:='';
kcsl2:='';
sl2:='';
bmbm2:='';
FETCH fc INTO spbm2,kcsl2,sl2,bmbm2;
EXIT WHEN fc%NOTFOUND;
select sum(sl) sl into ck_sl2 from t_ckmx where spbm=spbm2;
resault:=sl2-kcsl2+ck_sl2;
IF resault>=0 THEN
UPDATE T_pdmx
SET clbz='z',
xgr=czybm,
xgrq=sysdate
WHERE CURRENT OF pd;
insert into t_ykmx(rq,dh,lb,ly,bmbm,spbm,sl,lrr,lrrq,clbz) values(rq1,nvl(max(nvl(dh,0)),0)+1,'y','0',bmbm2,spbm2,resault,czybm,sysdate,'0');
else
update t_pdmx
set clbz='z',
xgr=czybm,
xgrq=sysdate
WHERE CURRENT OF pd;
insert into t_ykmx(rq,dh,lb,ly,bmbm,spbm,sl,lrr,lrrq,clbz) values(rq1,nvl(max(nvl(dh,0)),0)+1,'k','0',bmbm2,spbm2,abs(resault),czybm,sysdate,'0'); END IF;
EXIT;
END LOOP;
CLOSE pd;
COMMIT;
EXCEPTION WHEN OTHERS THEN NULL;
END;帮忙看看错在哪里呀!!!!!!!!!!!!
--盘点明细
drop table t_pdmx;
create table t_pdmx
(
rq varchar2(8) not null, --盘点日期
dh number not null, --盘点单号
bmbm varchar2(2) not null, --部门编码
spbm varchar2(6) not null, --商品编码
kcsl number(14,4) not null, --库存数量
sl number(14,4), --盘点数量(实际盘点数)
dwbm varchar2(5), --单位编码
jyfs varchar2(1), --商品属性
dlm varchar2(2), --大类码
lrr varchar2(10) not null, --录入操作员编码
lrrq date default sysdate not null, --录入日期
xgr varchar2(10), --修改操作员编码
xgrq date, --修改日期
tzr varchar2(10), --调整操作员编码
tzrq date, --调整日期
clbz varchar2(1) default '0' not null, --处理标志(0-未生成盈亏,Z-已生成盈亏)
fdmc varchar2(20) --分店名称
)
/--盈亏明细
drop table t_ykmx;
create table t_ykmx
(
rq varchar2(8) not null, --日期(业务发生日期)
dh number not null, --单号(业务单据号)
lb varchar2(1), --类别(Y-盘赢,K-盘亏)
ly varchar2(1) not null, --盈亏来源(0-机器自动,1-手工录入盈亏)
bmbm varchar2(2), --部门编码
spbm varchar2(6) not null, --商品编码
js number(14,4), --件数
mjsl number(14,4), --每件数量
sl number(14,4) not null, --数量(业务数量)
bz varchar2(100), --备注
dwbm varchar2(5), --单位编码
jyfs varchar2(1), --经营方式(商品属性)
jhjg number(14,4), --进货价格
jhbh number, --进货编号(批次号)
dlm varchar2(2), --大类码
zzsl number(3), --增值税率
scrq varchar2(8), --生产日期(保质报警用)
lrr varchar2(10) not null, --录入操作员编码
lrrq date default sysdate not null, --录入日期
xgr varchar2(10), --修改操作员编码
xgrq date, --修改日期
shr varchar2(10), --审核人
shrq date, --修改日期
tzr varchar2(10), --调整操作员编码
tzrq date, --调整日期
clbz varchar2(1) default '0' not null, --处理标志(0-未调库存,Z-已调库存)
dycs number default 0, --打印次数
fdmc varchar2(20) --分店名称
)
/
EXIT WHEN fc%NOTFOUND;
中的fc我已经改成pd了,还是不行。
以上这条语句不存在记录时会出错。这条语句不明白为何在值那里出现函数nvl,max
insert into t_ykmx(rq,dh,lb,ly,bmbm,spbm,sl,lrr,lrrq,clbz) values(rq1,nvl(max(nvl(dh,0)),0)+1,'y','0',bmbm2,spbm2,resault,czybm,sysdate,'0');还有在end if 后多了一个EXIT; 这样游标只作一次循环,是否你的意思?