Numeri c Переполнение при преобразовании oracle в PostgreSQL - PullRequest
2 голосов
/ 12 июля 2020

Я конвертирую очень старый Oracle DB в Postgres, где большая часть точности столбцов numeri c отсутствует, однако в структуре таблицы Postgres присутствует точность тех же столбцов, я я получаю множество ошибок переполнения numeri c при перемещении данных из Oracle DB в Postgres.

Теперь я хочу обновить все эти значения без точности до наибольшего числа точности в база данных oracle, поэтому я пытаюсь создать сценарий обновления, используя структуру таблицы Postgres, которая может помочь мне найти все поврежденные строки в oracle.

Мой запрос выглядит следующим образом (для запуска на Postgres), который я хочу изменить, чтобы получить сценарий обновления, который я могу запустить на oracle DB, чтобы получить поврежденные значения.

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';

Теперь здесь ( numeric_precision - numeric_scale ), если он возвращает значение 3, я хочу заменить его на 999, если оно равно 4, тогда я хочу, чтобы это было 9999.

Пожалуйста, дайте мне знать, как это возможно, я хочу запустить этот запрос на Postgres DB, а затем я запустил полученный скрипт на Oracle DB?

1 Ответ

2 голосов
/ 12 июля 2020

Вы можете использовать длину вашего результата (numeric_precision - numeric_scale) для добавления шаблона, который вы предпочитаете, используя LPAD

LPAD('', length((numeric_precision - numeric_scale)), '9' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...