Я переработал свою базу данных SQL на базе Firebird. В рамках этого процесса я создал новую таблицу с именем HARMONICS. Используя инструмент администрирования на основе графического интерфейса, я создал следующие столбцы:
HARM_LP_ID Integer NOT NULL
HNUMBER Integer NOT NULL
HAMPCHNL0 Double precision
HAMPCHNL1 Double precision
HAMPCHNL2 Double precision
HAMPCHNL3 Double precision
HAMPCHNL4 Double precision
HAMPCHNL5 Double precision
HPHCHNL0 Double precision
HPHCHNL1 Double precision
HPHCHNL2 Double precision
HPHCHNL3 Double precision
HPHCHNL4 Double precision
HPHCHNL5 Double precision
После этого я вставил в новые сущности некоторые тестовые данные. Изменения коснулись и других таблиц, но они не связаны с моей проблемой, поэтому я не буду их здесь перечислять. Затем я настроил свое приложение для работы с новой структурой реляционной базы данных.
Когда приложение было полностью протестировано, я улучшил утилиту под названием Upgrader. Задача Upgrader - конвертировать между различными версиями баз данных SQL. Для выполнения этой задачи я написал сценарий SQL. Следуя ошибочным руководствам на официальном сайте Firebird (http://firebirdsql.org/manual/migration-mssql-data-types.html) Я написал следующую команду для создания вышеупомянутой таблицы:
CREATE TABLE HARMONICS
(
HARM_LP_ID Integer NOT NULL,
HNUMBER Integer NOT NULL,
HAMPCHNL0 Float,
HAMPCHNL1 Float,
HAMPCHNL2 Float,
HAMPCHNL3 Float,
HAMPCHNL4 Float,
HAMPCHNL5 Float,
HPHCHNL0 Float,
HPHCHNL1 Float,
HPHCHNL2 Float,
HPHCHNL3 Float,
HPHCHNL4 Float,
HPHCHNL5 Float,
CONSTRAINT PKHARMONICS1 PRIMARY KEY (HARM_LP_ID,HNUMBER)
);
Я думал, что тип данных Firebird «Float» - это float двойной точности (то же, что и тип данных «double» в C). В конце концов я обнаружил, что ошибался, но это было после того, как я создал официальный выпуск утилиты Upgrader. Итак, теперь у меня в обращении есть две версии баз данных - одна с числами с плавающей запятой одинарной точности и вторая с числами с плавающей запятой двойной точности.
Я ищу сценарий SQL, который проверяет фактический тип данных столбцов в таблице HARMONICS. Если это двойная точность, скрипт ничего не сделает. Если это одинарная точность, скрипт преобразует столбцы с типом данных «Float» в «Double precision» с сохранением всех существующих данных. Дело в том, что скрипт в любом случае не вернет ошибку. Это возможно? Если да, то как?