SQL 脚本中的全角逗号引起【ORA-01756: 引号内的字符串没有正确结束】
来源:互联网 发布:宋茜演技知乎 编辑:程序博客网 时间:2024/05/28 20:18
今天运行壹個小程序,功能是读取指定目录下的 SQL 脚本,并加载到内存中批量执行,之前的程序运行良好。但是今天相关开发人员更新了其中壹個 SQL 脚本,于是程序运行的时候就出错了,错误提示信息如下:批处理中出现错误: ORA-01756: 引号内的字符串没有正确结束。用 Notepad++ 打开看了下 SQL 脚本,没有发现明显的语法错误,再仔细找了找包含单引号和双引号的语句,也没有看到语句未正确结束的地方。于是有点困惑,开始启动 Eclipse 的 Debug 模式仔细分析,并调低了日志级别到 DEBUG,将所有解析出来的 SQL 语句打印至控制台。
结果在日志中发现有的 SQL 语句解析之后居然是乱码,截取部分内容如下所示:
4,2,'?占淇迹罩湛贾? from TRUSTDB.TRUST_PRDT_MEM_SET t很明显的,数字2后面的部分只有壹個开始的单引号,而没有关闭的单引号,看来极有可能是这段乱码引起的,上述内容在原始的 SQL 文件(GBK 编码)中实际是这样的:
4,2,'日间开始,日终开始之前' from TRUSTDB.TRUST_PRDT_MEM_SET t不知道为什么经过 Java 解析之后会变成壹串乱码。找到问题的所在,修改的时候直接把“日间开始,日终开始之前”中间的全角逗号改成了半角逗号,问题就宣告解决,同时我还注意到在这個 SQL 脚本中,还有其它地方也使用到了全角的逗号,但是那些地方没有出问题,独独此处报错了,真是奇怪。在我看来,这個修复方法实在不太理想,不知道是否还有更好的方法。另外,附上我的 SQL 文件解析代码如下。
List<String> loadSql(String filepath) throws Exception {List<String> sqls = new ArrayList<String>();StringBuffer sb = new StringBuffer();byte[] buff = new byte[1024];int byteRead = 0;LOGGER.debug("Start parse sql file [" + filepath + "].");InputStream sqlFileIn = ClasspathResourceLoader.getResourceAsStream(filepath);//开始读取文件内容while ((byteRead = sqlFileIn.read(buff)) != -1) {sb.append(new String(buff, 0, byteRead));}//将读取到的字符串以换行符分割String[] sqlArr = sb.toString().split("(;\\s*\\r\\n)|(;\\s*\\n)");for (int i = 0; i < sqlArr.length-1; i++) {//将每個独立语句中的注释和末尾的分号去掉,只保留语句内容String sql = sqlArr[i].replaceAll("--.*", "").replaceAll(";", " ").trim();if (!sql.equals("")) {sqls.add(sql);}}LOGGER.debug("sql list=" + sqls);return sqls;}目前这個问题暂存,待日后有更好的方法时我会回过头来继续补充完善。
0 0
- SQL 脚本中的全角逗号引起【ORA-01756: 引号内的字符串没有正确结束】
- ORA-01756:引号内的字符串没有正确结束
- Oracle导入带中文的sql文件,报ORA-01756: 引号内的字符串没有正确结束
- oracle error 引号内的字符串没有正确结束
- sql里的时间没有引号引起来
- python 以逗号分割,忽略引号内的逗号
- ORA-00933: SQL 命令未正确结束
- 初学 template.update里的SQL语句(引号内),不能用分号结束
- 对包含逗号、引号的CSV字符串的解析函数
- java.sql.SQLException: ORA-00933: SQL 命令未正确结束
- php 下全角逗号和英文逗号的汉字字符串分割成数组
- 在SQL脚本中的注释引起的奇怪问题
- ORA-00933: SQL 命令未正确结束处理办法
- Mybatis,oracle,ORA-00933: SQL 命令未正确结束
- 【ORACLE】ORA-00933 sql 命令未正确结束
- ORA-00933: SQL 命令未正确结束 / ORA-00933: SQL command not properly ended
- SQL多层嵌套引起的ORA-00904
- SQL字符串拼接动态SQL中的 引号问题
- javaScript-DOM操作(六)
- android面试。
- javascript类型转换表
- myeclipse10 激活问题
- 九度OJ 1207 质因数的个数
- SQL 脚本中的全角逗号引起【ORA-01756: 引号内的字符串没有正确结束】
- 黑马程序员----网络编程(1)
- 性能测试常见问题解决思路
- 让cpu占用率曲线听你指挥
- group by 和count的联合使用问题
- 性能计数器说明 %disk time超过100% ?
- poj2689素数问题
- 谷歌、微软争相布局 科技巨头抢滩物联网
- 大数据库技术在與情分析领域的应用