Я перепроектировал свою базу данных 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-скрипт, который проверял бы фактический тип данных столбцов в таблице. ГАРМОНИКА. Если это двойная точность, то скрипт ничего не делает. Если это одинарная точность, скрипт конвертирует столбцыс типом данных "Float" в "Double точность" с сохранением всех существующих данных. Дело в том, что скрипт не будет возвращать ошибку в любом случае. Возможно ли это? Если да, то как?