java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效

问题:

在@Select里采用Contact('%',#name,'%')报错参数个数无效

原因:

回想以前用Mysql的时候就是这样用的,没有问题,在这里就出问题了,所以确定问题在oracle数据库上,经过查询得知,oracle和mysql的concat函数不太一样。

一、函数的使用参数不同

Mysql支持多个字符串拼接:

CONCAT(str1,str2,...)

Oralce只支持两个字符串的拼接,若想拼接多个字符串可以嵌套使用concat

CONCAT(str1,str2)

二、参数中有Null的处理方式不同

Mysql:返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

Oralce:如有任何一个参数为NULL ,则返回值拼接后的字符串。

三、其它方面

Mysql:如果所有参数均为非二进制字符串,则结果为非二进制字符串。

如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。

Oracle:如果CONCAT中连接的值不是字符串,Oracle会尝试将其转换为字符串

注:Oracle拼接字符串还可以使用"||",当参数为Null时,返回值拼接后的字符串。

解决:

a.name like concat('%',#{name},'%')  改成  a.name like concat(concat('%',#{name}),'%')

相关推荐
自由的好好干活1 天前
使用Qoder编写ztdaq的C#跨平台示例2
开发语言·c#·ai编程
回忆是昨天里的海1 天前
docker常见命令
java·docker·容器
计算机毕设vx_bysj68691 天前
计算机毕业设计必看必学~Springboot教学进度管理系统,原创定制程序、单片机、java、PHP、Python、小程序、文案全套、毕设成品等!
java·spring boot·vue·课程设计·管理系统
赵财猫._.1 天前
Native API开发:C++与ArkTS混合编程实战
开发语言·c++·harmonyos
普通网友1 天前
基于C++的操作系统开发
开发语言·c++·算法
狂团商城小师妹1 天前
JAVA外卖霸王餐CPS优惠CPS平台自主发布小程序+公众号霸王餐源码
java·开发语言·小程序
2501_941111341 天前
C++中的策略模式高级应用
开发语言·c++·算法
q***11651 天前
Spring 中的 @ExceptionHandler 注解详解与应用
java·后端·spring
心软小念1 天前
用Python requests库玩转接口自动化测试!测试工程师的实战秘籍
java·开发语言·python