You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ORA-00923错误排查:Spring Boot中SQL参数传递问题

问题分析与解决

错误原因

你遇到的ORA-00923错误,核心问题出在SQL语句的占位符写法上:
你的SQL里把参数占位符?用单引号包裹成了'?',这会让Oracle数据库将'?'当成普通字符串字面量,而非参数占位符。这种写法会破坏SQL的语法结构,导致数据库解析时无法正确识别FROM子句的位置,从而抛出该错误。

修正方案

把SQL语句中的'?'替换为?,修正后的SQL如下:

mapSQLStmt.put("valcurpcustomer", "select * from acnts left join clients on acnts.acnts_client_num = clients.clients_code where acnts.acnts_internal_acnum = ? and clients.clients_type_flg='C' ");

额外优化提示

由于使用了LEFT JOIN,当前WHERE子句中的clients.clients_type_flg='C'会过滤掉clients表无匹配记录的行,效果等同于INNER JOIN。如果需要保留LEFT JOIN的特性(即保留acnts表中所有符合账号条件的记录,无论clients表是否有匹配),应该把该条件移到ON子句中:

select * from acnts left join clients on acnts.acnts_client_num = clients.clients_code and clients.clients_type_flg='C' where acnts.acnts_internal_acnum = ?

学习方向

  • Oracle SQL语法规范:重点掌握JOIN语句的用法、WHERE与ON子句的区别,以及参数占位符的正确使用方式。
  • JDBC参数绑定机制:理解预编译语句(PreparedStatement)的工作原理,明确?作为占位符的作用,避免手动拼接SQL字符串(防止SQL注入同时减少语法错误)。
  • Spring Boot数据库操作框架:学习使用JdbcTemplate或MyBatis这类框架,它们能更安全、便捷地处理SQL参数绑定,降低手动编写SQL的出错概率。

内容的提问来源于stack exchange,提问作者donaldjbrewer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:01:46