SELECT TRIM(BOTH FROM XXXX) FROM TABLE_A ,XXXX为字段名,其中的BOTH FROM中的FROM会引起SQL解析错误。
以下为某次报错的部分日志: Preparing: SELECT TRIM(BOTH FROM EUCD) AS "value",NTLANG1 AS "text" FROM T_HT_WREM_ENUMLANG_D WHERE TYPE=? ORDER BY "value" ASC 2016-07-12 14:32:08,155 [http-apr-8080-exec-9] DEBUG [**dao.mapper.EnumLangMapper.selectByType] - ==> Parameters: 10(String) 2016-07-12 14:32:08,220 [http-apr-8080-exec-9] WARN [com.alibaba.druid.sql.SQLUtils] - format error com.alibaba.druid.sql.parser.ParserException: ERROR. token : FROM, pos : 21 at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:547) at com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser.primary(OracleExprParser.java:485) at com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser.methodRest(OracleExprParser.java:512) at com.alibaba.druid.sql.parser.SQLExprParser.primaryRest(SQLExprParser.java:653)
原提问者GitHub用户SaddestMoon
在使用TRIM函数时,可以使用BOTH关键字指定要删除字符串两侧的字符。在此过程中,使用BOTH FROM子句指定要删除的字符集。由于FROM是SQL语言的保留字之一,因此在使用FROM作为BOTH子句的一部分时可能会导致SQL解析错误。
为了避免这个问题,可以使用方括号将BOTH FROM子句括起来,从而使SQL解析器将其视为一个整体而不是关键字序列。
根据您提供的信息,您遇到了一个Oracle SQL语法解析错误。具体来说,您在SELECT语句中使用了TRIM函数,并且在BOTH FROM之间的FROM关键字引起了解析错误。
从报错信息中可以看到,错误发生在FROM关键字的位置上。这可能是由于解析器无法正确识别TRIM函数中的BOTH FROM作为一个整体,导致解析错误。
在Oracle中,TRIM函数用于去除字符串中的空格或指定的字符。要避免解析错误,您可以使用其他语法来指定TRIM函数的参数。一种可行的方式是使用单引号将BOTH FROM括起来,将其视为一个字符串,如下所示:
SELECT TRIM('BOTH FROM' FROM XXXX) FROM TABLE_A
这样做可以避免解析器错误地将FROM关键字作为TRIM函数的参数之一。
请注意,您在给出的报错信息中提到了com.alibaba.druid.sql.parser和com.alibaba.druid.sql.dialect.oracle.parser,这可能是您在使用Druid连接池和Oracle数据库时遇到的特定问题。如果以上解决方法不起作用,您可能需要检查您的Druid版本和连接配置,以确保其与Oracle数据库的语法和功能兼容。
如果问题仍然存在或需要进一步帮助,请提供更多相关的错误信息和SQL语句,以便我能够更准确地回答您的问题。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
根据您提供的日志信息,似乎是Oracle解析器在解析SQL语句时遇到了问题。具体来说,在TRIM(BOTH FROM XXXX)
函数中,FROM
关键字引起了解析错误。
这是因为在Oracle SQL中,TRIM
函数与BOTH
关键字之间需要使用空格进行分隔,以区分关键字和其他标识符。如果没有正确的空格分隔,Oracle解析器将无法正确识别语法。
要解决此问题,请确保在TRIM
函数的BOTH
关键字之前和之后都有一个空格,例如:TRIM( BOTH FROM XXXX )
。这样可以确保Oracle解析器能够正确解析SQL语句。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。