程序中有一段代码的功能是向某张表中插入一条语句,从日志中打印出来的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 请各位帮忙看看
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 请各位帮忙看看
本身能存放的字符数量远远大于VARCHAR2(3000)能存放的在线等,谢谢
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个字符。
原来就是忘记字符需要用单引号扩着。加上单引号就好了。