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

相关文章

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods