No operator matches the given name and argument type(s). You might need to add explicit type casts报错

2023-11-01 15:50

本文主要是介绍No operator matches the given name and argument type(s). You might need to add explicit type casts报错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、报错信息:

PostgreSQL下数据类型转化报错:No operator matches the given name and argument type(s). You might need to add explicit type casts报错。
正式环境,出现如下问题:

在这里插入图片描述
但是公司内网测试环境竟然没有报错(离大谱)!!
在这里插入图片描述

二、出现问题原因为:

数据库字段中使用int2,参数类型为String,此时就会报 character varying = bigint错误。

三、解决方案:
(1)修改代码参数类型

有人就直接修改了代码参数类型,修改接口参数即可,然后再使用jenkins构建发布,幸运的话就直接解决问题了,倘如项目有很多诸如类似的问题,全局搜索后绝望无比。。。

(2)使用强转函数
那么有的人说不想修改参数怎么办,另一种方式就是修改xml中表的字段。
在这里插入图片描述

(3)创建新的类型转换

那么又有人说,我没有使用xml写sql语句,使用的注解方式(复杂sql不建议使用注解方式)或者说字段太多一个个修改效率太低怎么办?就不能像MySQL和Oracle那样默认对数据类型进行转换吗?
pg确实没有实现数据类型的自动转换,但是!pg官方文档中也给出了相应处理方式,可以设置自定义的数据类型转换。如下:(创建类型转换需要注意以下描述)
①创建类型转换:

CREATE CAST (INTEGER AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS INTEGER) WITH INOUT AS IMPLICIT;
CREATE CAST (BIGINT AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS BIGINT) WITH INOUT AS IMPLICIT;

–注:创建cast需要有pg_cast系统表的权限
–注:当创建类型转换使用自动隐式转换的话如果出现多个匹配的转换此时pg会因为不知道选择哪一个去处理类型转换而报错。
–如果出现多个隐式自动转换都匹配此时还是需要手动添加转换以达到效果,或者删除多余的类型转换。在这里插入图片描述

这样我们就解决了上述又不想修改参数,也不想修改xml字段类型的问题。

②查询已存在的转换类型:

SELECT( SELECT typname FROM pg_type WHERE oid = T.castsource ) AS “ castsource”,( SELECT typname FROM pg_type WHERE oid = T.casttarget ) AS “ casttarget”,castcontext,castmethod 
FROMpg_cast AS T

③删除已存在转换类型:

DROP CAST (varchar as bigint);
DROP CAST (bigint as varchar);

上述解决办法适用于一直在pg数据库环境下开发的项目。
四、总结:
开发人员一定要规范开发代码,虽然说有的数据库(指MySQL或Oracle)会给我们优化掉,但是类型还是严格对应,不过PostgregSQL确实和其他两个热门数据库比较还是有很多区别点,开发时需要特别注意,详细区别可见另一篇文章:
《PostgreSQL和MySQL的区别》

在这里插入图片描述

这篇关于No operator matches the given name and argument type(s). You might need to add explicit type casts报错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/324084

相关文章

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno