开发者社区> 问答> 正文

ORACLE 语法解析错误

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

展开
收起
山海行 2023-07-05 21:40:37 70 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在使用TRIM函数时,可以使用BOTH关键字指定要删除字符串两侧的字符。在此过程中,使用BOTH FROM子句指定要删除的字符集。由于FROM是SQL语言的保留字之一,因此在使用FROM作为BOTH子句的一部分时可能会导致SQL解析错误。

    为了避免这个问题,可以使用方括号将BOTH FROM子句括起来,从而使SQL解析器将其视为一个整体而不是关键字序列。

    2023-07-30 09:36:19
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    根据您提供的信息,您遇到了一个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语句,以便我能够更准确地回答您的问题。

    2023-07-11 17:06:39
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 12:17:22
    赞同 展开评论 打赏
  • 根据您提供的日志信息,似乎是Oracle解析器在解析SQL语句时遇到了问题。具体来说,在TRIM(BOTH FROM XXXX)函数中,FROM关键字引起了解析错误。

    这是因为在Oracle SQL中,TRIM函数与BOTH关键字之间需要使用空格进行分隔,以区分关键字和其他标识符。如果没有正确的空格分隔,Oracle解析器将无法正确识别语法。

    要解决此问题,请确保在TRIM函数的BOTH关键字之前和之后都有一个空格,例如:TRIM( BOTH FROM XXXX )。这样可以确保Oracle解析器能够正确解析SQL语句。

    2023-07-06 09:15:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像