ORA-00933错误:SQL在Oracle中正常但Java调用时报错
解决ORA-00933:SQL命令未正确结束的问题
嘿,我一眼就揪出你SQL语句里的问题了!这个ORA-00933错误是因为你的SQL存在两处语法小问题——Oracle客户端可能会对这些细节宽松处理,但JDBC驱动会严格解析每一个字符,具体问题如下:
- 多余的逗号:在
WHERE DOK_MIME_TYPE='application/pdf'后面你多写了个逗号,这完全没必要!Oracle的OFFSET...FETCH语法是直接跟在WHERE子句(如果有ORDER BY的话就跟在ORDER BY后面)之后的,不需要额外的逗号分隔。 - 末尾的分号:JDBC执行SQL时,不需要在语句末尾加分号——这个分号是我们在SQL客户端里用来结束命令的标记,但放到JDBC的字符串里会被当成SQL的一部分,直接触发语法错误。
修正后的SQL语句应该是这样的:
select DOK_ID , ID, AKTEN_ID , TITEL , DOK_TYP , DOK_ART , ERSTELL_DAT , EING_DAT , DOK_MIME_TYPE from patgbmf.supi where DOK_MIME_TYPE='application/pdf' OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY
把你的Java代码里executeQuery的参数换成上面的语句,再运行就没问题了。另外给你提个小建议:最好给查询加上ORDER BY子句,不然OFFSET和FETCH的结果可能会不稳定——因为没有排序的话,Oracle返回的行顺序是不固定的,每次分页的结果可能会出现重复或者遗漏的情况。
比如可以改成更严谨的版本:
select DOK_ID , ID, AKTEN_ID , TITEL , DOK_TYP , DOK_ART , ERSTELL_DAT , EING_DAT , DOK_MIME_TYPE from patgbmf.supi where DOK_MIME_TYPE='application/pdf' ORDER BY DOK_ID OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY
这样分页结果就稳定啦!
内容的提问来源于stack exchange,提问作者AlexanderB
相关产品推荐
相关产品推荐

