Highgo DB和oracle隐式转换规则(APP)
目录环境文档用途详细信息环境系统平台:Linux x86-64 Red Hat Enterprise Linux 7版本:5.6.4文档用途highgo数据库执行某些隐式转换可能会产生错误,但是在oracle中不会出现。瀚高报错如下:ERROR: operator does not exist: integer = text本文针对上述现象主要介绍:两者隐式转换机制的不同如何解决和避免highgo
目录
环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:5.6.4
highgo数据库执行某些隐式转换可能会产生错误,但是在oracle中不会出现。瀚高报错如下:
ERROR: operator does not exist: integer = text |
详细信息
1. Postgresql
1.1 PostgreSQL隐式类型转换机制
select * from t_cast where id = '1';(id为int类型) |
未指定类型,'1'会被视为string literal,在PostgreSQL中如果string literal没有指定类型则'1'类型为unknown,PostgreSQL会尝试把1转换为整型进行比较。
select * from t_cast where id = '1'::text; |
指定了数据类型,'1'的类型为text,如果既没有定义cast中int到text转换或者操作符未包含该类型则会报错
1.2 可以进行转换的情形
1.2.1 该类型为pg_operator系统目录中左类型可以匹配的右类型
PostgreSQL根据系统目录中的定义来确定类型D1和类型D2能否执行某个操作O
执行如下语句进行查询操作O为"="二元操作符,左类型为D1,右类型D2可用类型:
select oprname,oprleft::regtype,oprright::regtype,oprcode from pg_operator where oprname='=' and oprleft::regtype='int'::regtype; |
oprleft为左侧类型D1,oprright为右侧可用类型D2如下图:
1.2.2 在pg_cast系统目录中定义为可相互转换的对象
执行如下语句进行查询int类型已定义的可以转换对象:
select castsource::regtype,casttarget::regtype,castfunc from pg_cast where castsource::regtype='integer'::regtype; |
casttarget类中数据为int已定义的可以转为的对象 如下图:
所以没有定义operator也没有定义数据类型cast,因此int与text等值比较会报错
更多详细信息请登录【瀚高技术支持平台】查看瀚高技术支持平台

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)