程序中有一段代码的功能是向某张表中插入一条语句,从日志中打印出来的SQL语句如下:
     INSERT INTO T_PP_SEND ( ID, MOBILE, PUSH_ID, TOTAL_MSG_NUM, MSG_INDEX, MSG_TYPE, SEND_MSG,REQUIRE_DATE, PROCESS_FLAG, OTAMSGID, SENDCOUNT, RFMBATCH, CHANNEL ) VALUES (SEQ_PP_SEND.NEXTVAL, '13872546870' , SEQ_PUSH.NEXTVAL , 1,1,1,'AnAAABkRAgAAEbAAEAAAAAAoAMjbweqtYZCxAQUA',sysdate, 0, 0, 0,1000 ,1)
     
     
      通过PL/SQL执行,插入成功
      通过SQLPLUS执行,插入成功
      但是只要程序运行时,就会给出一个"java.sql.SQLException: ORA-00972: 标识过长"的异常,插入不成功。而且错误日志指向的就是这条语句错误      曾经考虑过字符集和表结构的关系,做过改动,情况依然存在。
      这张表修改之后的表结构如下:
      Name          Type           Nullable Default Comments 
------------- -------------- -------- ------- -------- 
ID            NUMBER(10)                               
MOBILE        VARCHAR2(3000)                           
PUSH_ID       NUMBER(10)                               
TOTAL_MSG_NUM NUMBER(10)                               
MSG_INDEX     NUMBER(10)                               
MSG_TYPE      NUMBER(10)                               
SEND_MSG      VARCHAR2(3000)                           
REQUIRE_DATE  DATE                                     
DEAL_DATE     DATE           Y                         
PROCESS_FLAG  NUMBER(10)                               
OTAMSGID      NUMBER(20)                               
SENDCOUNT     NUMBER(10)                               
RFMBATCH      NUMBER(10)     Y                         
CHANNEL       NUMBER(10)     Y                         请各位帮忙看看
      

解决方案 »

  1.   

    在java中将对应SEND_MSG的变量改为:VARCHAR2(3000)
      

  2.   

    对不起,在java中将对应SEND_MSG的变量长度改为:3000个字符。 
      

  3.   

    如何理解?这个变量是java.lang.String类型的
    本身能存放的字符数量远远大于VARCHAR2(3000)能存放的在线等,谢谢
      

  4.   

    通过PL/SQL执行,插入成功就说明sql没问题.前台程序一般对于字符类型的插入,应该先作长度校验的.
      

  5.   

    唉!终于找到为什么了。
    StringBuffer sql = new StringBuffer
    ("select * from t_rsd_directory where directoryid = '");
    sql.append(directoryid);
    sql.append("'");
    System.out.println(sql);
    rs = stmt.executeQuery(sql.toString());
    我的directoryid也是很长,超过30个字符。
    原来就是忘记字符需要用单引号扩着。加上单引号就好了。