Estoy convirtiendo una base de datos de Oracle muy antigua a Postgres donde falta la mayor parte de la precisión de las columnas numéricas, sin embargo, en la estructura de la tabla de Postgres, la precisión de las mismas columnas está presente, obtengo una gran cantidad de errores de desbordamiento numérico al mover datos de Base de datos Oracle a Postgres.
Ahora, quiero actualizar todos los valores sin precisión al mayor número de precisión en la base de datos de Oracle, por lo tanto, estoy tratando de crear un script de actualización usando una estructura de tabla de Postgres que puede ayudarme a encontrar todas las filas dañadas en El oráculo.
Mi consulta es la siguiente (para ejecutarse en Postgres), que quiero modificar para obtener el script de actualización que puedo ejecutar en Oracle DB para obtener los valores corruptos.
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';Ahora aquí ( numeric_precision - numeric_scale ) si devuelve un valor 3, entonces quiero reemplazarlo con 999 en caso de que sea 4, entonces quiero que sea 9999.
¿Puede alguien decirme cómo es esto posible? Quiero ejecutar esta consulta en Postgres DB y luego ejecutaré el script resultante en Oracle DB.
Puede usar la longitud de su resultado (numeric_precision - numeric_scale) para agregar el patrón que prefiera usando LPAD
LPAD('', length((numeric_precision - numeric_scale)), '9' )