1

Firebird ベースの SQL データベースを再設計しました。このプロセスの一環として、HARMONICS という名前の新しいテーブルを作成しました。GUI ベースの管理ツールを使用して、次の列を作成しました。

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" は倍精度浮動小数点 (C のデータ型 "double" と同じ) だと思いました。最終的に自分が間違っていることがわかりましたが、これは Upgrader ユーティリティの公式リリースを作成した後でした。そのため、現在、2 つのバージョンのデータベースが流通しています。1 つは単精度浮動小数点数を使用し、もう 1 つは倍精度浮動小数点数を使用しています。

テーブルHARMONICSの列の実際のデータ型をチェックするSQLスクリプトを探しています。これが倍精度の場合、スクリプトは何もしません。これが単精度の場合、スクリプトはデータ型が「Float」の列を「倍精度」に変換し、既存のすべてのデータを保持します。ポイントは、どちらの場合もスクリプトがエラーを返さないことです。これは可能ですか?はいの場合、どのように?

4

1 に答える 1