迁移过程中将布尔类型转为数值类型(APP)

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迁移过程中将布尔类型转为数值类型(APP)相关的知识,希望对你有一定的参考价值。

目录
环境
症状
问题原因
解决方案

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.3.4.7
症状
在应用迁移适配过程中,应用测试可能会遇到异常,数据库日志报错如下:

2020-06-18 16:38:35.990 CST,“pmweb”,“pmweb”,19406,“172.16.56.188:58236”,5eeb2495.4bce,516,“PARSE”,2020-06-18 16:23:49 CST,17/237,0,ERROR,42804,“column ““is_carry_forward”” is of type numeric but expression is of type boolean”,“You will need to rewrite or cast the expression.”,"insert into pm_j_acnt

问题原因
出现该问题的原因是表中的列“is_carry_forward”是数值(numeric)类型的,而 insert语句中对应该列值的表达式值却是布尔(boolean)类型。由于瀚高数据库是强类型的,并没有默认自动转换,所以会报错。

解决方案
根据以上问题描述,可以通过自定义数据类型转换来解决。

创建类型转换:

create or replace function boolean_to_numeric( boolean ) returns numeric as $$

select $1::integer::numeric;

$$ language sql strict;

create cast ( boolean as numeric ) with function boolean_to_numeric( boolean ) as implicit;

再打开应用进行测试,就不会报错了。

注意:

如果增加类似的自定义类型转换过多,可能会报以下错误:

ERROR,42725,“operator is not unique: numeric = boolean”,“Could not choose a best candidate operator. You might need to add explicit type casts.”

无法选择最佳候选操作符。您可能需要添加显式类型强制转换。

解决方法:

检查类似的自定义类型转换,去掉繁琐且可能造成转换死循环的,选择最优的留下。

更多解决方案请登录【瀚高技术支持平台】查看https://support.highgo.com/#/index/docContent/74c56ecc05741fc3

以上是关于迁移过程中将布尔类型转为数值类型(APP)的主要内容,如果未能解决你的问题,请参考以下文章

Python数据类型 -数值类型(整数,浮点,布尔)

自动类型转换

char类型的数值转换

JS 数据类型转换以其他

Spark之处理布尔数值和字符串类型的数据

Python 基础 - 4 常用数值类型(int,float,bool)操作