as
defvir pan_virtualspoilinfo%rowtype;
out_number number(1);
begin
savepoint point1;
--向用户积分流水表插入记录
insert into CTM_IntegralRec(IntegralRecId,CustomerId,Cid,integral,regdate,Reason,codedata,ClearFlag)values(
SEQ_CTM_INTEGRALREC.NEXTVAL,customersn,cid,integral,to_date(regdate,'YYYY-MM-DD HH24:MI:SS'),reason,codedate,clearflag);
--更新用户积分信息表
update Pan_UserIntegralInfo p set p.userGrade= userGrade,p.integralTotal=integralTotal,p.useIntegral=userIntegral,
p.remainIntegral=remainIntegral,p.freezeDate = to_date(freezeDate,'YYYY-MM-DD HH24:MI:SS'),
p.integralState=integralState where p.customerSn = customersn;
每次执行到 update 的时候 就报错 数字或值错误: 字符串缓冲区太小
PROCEDURE AdddefIntegralRec --总存储过程
(
/*用户积分流水表*/
customersn in number,
cid in varchar2,
integral in number,
regdate in varchar2,
reason in varchar2,
codedate in varchar2,
clearflag in number, /*用户积分信息表*/
userGrade in varchar2,
integralTotal in number,
userIntegral in number,
remainIntegral in number,
freezeDate in varchar2,
integralState in number,
检查这个字符串和格式是不是一样的。
USERGRADE VARCHAR2(20)
INTEGRALTOTAL NUMBER(11)
USEINTEGRAL NUMBER(11)
REMAININTEGRAL NUMBER(11)
INTEGRALSTATE NUMBER(1)
FREEZEDATE DATE
这是数据库设计的字段 的长度和 类型
还有我 把那条 update 语句 直接放 sql 里面 执行是可以执行成功的! 我很疑惑!
update Pan_UserIntegralInfo p set p.userGrade= userGrade,p.integralTotal=integralTotal,p.useIntegral=userIntegral,
p.remainIntegral=remainIntegral,p.freezeDate = to_date(freezeDate,'YYYY-MM-DD HH24:MI:SS'),
p.integralState=integralState where p.customerSn = customersn;
不过你的insert的表和update的表不是同一个表哟。
p.remainIntegral=remainIntegral,p.freezeDate = to_date(freezeDate,'YYYY-MM-DD HH24:MI:SS'),
p.integralState=integralState where p.customerSn = customersn;
我以前也遇到过这个问题,变量名和字段名不能一样。改个名字再试一下。因该能行。
唉 什么时候 oracle 的时间能变得好处理些列 悲剧!!