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 的时候 就报错  数字或值错误: 字符串缓冲区太小

解决方案 »

  1.   

    这是定义的变量
      
    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, 
      

  2.   

    检查下时间参数regdate, freezeDate的格式是否为:YYYY-MM-DD HH24:MI:SS'
      

  3.   

    是不是某个字符的长度比表里的长度大呀。to_date(freezeDate,'YYYY-MM-DD HH24:MI:SS')
    检查这个字符串和格式是不是一样的。
      

  4.   

    应该不是这个问题哦 因为上面 insert 插入是正常的呀! 我调了一下午 很无奈...
      

  5.   

    CUSTOMERSN     NUMBER(9)
    USERGRADE      VARCHAR2(20)
    INTEGRALTOTAL  NUMBER(11)
    USEINTEGRAL    NUMBER(11)
    REMAININTEGRAL NUMBER(11)
    INTEGRALSTATE  NUMBER(1)
    FREEZEDATE     DATE
    这是数据库设计的字段 的长度和 类型
      还有我 把那条 update 语句 直接放 sql 里面 执行是可以执行成功的! 我很疑惑!
      

  6.   

    --你的变量名怎么跟你字段名是一样的?
        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;
      

  7.   


    不过你的insert的表和update的表不是同一个表哟。
      

  8.   

    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; 
    我以前也遇到过这个问题,变量名和字段名不能一样。改个名字再试一下。因该能行。
      

  9.   

        解决了  还是那个时间字段的原因
      唉 什么时候 oracle 的时间能变得好处理些列 悲剧!!