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}),'%')

相关推荐
choke2333 分钟前
[特殊字符] Python异常处理
开发语言·python
云中飞鸿4 分钟前
linux中qt安装
开发语言·qt
少控科技18 分钟前
QT第6个程序 - 网页内容摘取
开发语言·qt
darkb1rd18 分钟前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
南极企鹅19 分钟前
springBoot项目有几个端口
java·spring boot·后端
历程里程碑20 分钟前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴22 分钟前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
清风拂山岗 明月照大江25 分钟前
Redis笔记汇总
java·redis·缓存
承渊政道26 分钟前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee
xiaoxue..40 分钟前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试