我正在将一个非常旧的oracle db转换为postgres,在postgres表结构中,大多数数值列的精度都丢失了,但是在postgres表结构中,相同列的精度存在,我在将数据从oracle db移动到postgres时遇到了过多的数值溢出错误。
现在,我想将所有那些超出精度的值更新到oracle数据库中精度的最大值,因此,我尝试使用postgres表结构创建一个更新脚本,它可以帮助我查找oracle中所有损坏的行。
我的查询如下(将在postgres上运行),我想修改它以获取更新脚本,我可以在oracledb上运行该脚本以获取损坏的值。
select 'update ' ||table_name || 'set ' || column_name || '=' || (numeric_precision - numeric_scale) || ' where column_name > ' || (numeric_precision - numeric_scale) from information_schema.columns where table_schema='test' and data_type='numeric';
现在这里(数字精度-数字刻度)如果它返回一个值3,那么我想用999替换它,如果它是4,那么我想它是9999。
请有人告诉我这是怎么可能的,我想在postgres数据库上运行这个查询,然后我将在oracle数据库上运行结果脚本?
1条答案
按热度按时间w46czmvw1#
您可以使用(numeric\u precision-numeric\u scale)结果的长度来添加您喜欢使用lpad的模式