最近のアクセス:
データベースの再編成時に一時テーブルが作成される場合

データベース再編成の実行時に一時テーブルが作成されるのは、SQL ステートメントだけで解決するのが難しい場合です。データベース再編成の実行に使用されるジェネレーターは、再編成中に変換プログラムを作成して実行します。再編成の詳細については、こちらを参照してください。
この種のデータベースの再編成は、IAR (影響分析レポート) で確認できます。このような再編成では、一時テーブルが作成され、GeneXus プログラムまたは SQL ステートメントを使用してデータが新しい構造にコピーされます。
変換が必要なテーブルごとに、次の内容が詳述された <TableName>conversion という名前のファイルが作成されます:
CREATE TABLE  [ GXA0001 ]  ( ....)
テーブル <TableName> に対して変換プログラムを実行
DROP TABLE  [ <TableName> ] 
CALL sp_rename(' [ GXA0001 ] ', '<TableName>')
ALTER TABLE  [ <TableName> ]  ....
注: このデータベース再編成の例は SQLServer に関連付けられています。ほかの DBMS で実行する場合は若干異なります。
データベースの再編成では、次の処理が行われます:
  • GXA0001 という一時テーブルが、新しいテーブル構造で作成されます。
  • 変換プログラムが実行され、一時的な構造にデータが読み込まれます。
  • 古いテーブル "Tablename" が削除されます。
  • 一時テーブルの名前が正しい "TableName" に変更されます。
  • テーブルの制約が設定されます。
ジェネレーターは、データベース再編成中に、テーブルごとに以下のパターンを使用して変換プログラムを作成し、実行します。
<TableName>conversion.cs (C# ジェネレーター)
<TableName>conversion.java (Java ジェネレーター)
<TableName>conversion.rb (Ruby ジェネレーター)

1.トランザクションに BLOB 項目属性を追加する (バージョン X Evolution 2 Upgrade 3 までは SQLServer を使用)

注: バージョン X Evolution 2 Upgrade 3 以降では、この再編成の処理が最適化され、一時テーブルを作成する代わりに「ALTER TABLE」が使用されます (詳しくは、SAC #32631 を参照してください)。 
CREATE TABLE  [ GXA0001 ]  (
   [ Transaction1Id ]        SMALLINT     NOT NULL,
   [ Transaction1Num ]    SMALLINT     NOT NULL,
   [ Transaction1Blob ]      VARBINARY(MAX)     NOT NULL)

テーブル Transaction1 に対して変換プログラムを実行

DROP TABLE  [ Transaction1 ] 

CALL sp_rename(' [ GXA0001 ] ', 'Transaction1')

ALTER TABLE  [ Transaction1 ] 
ADD     PRIMARY KEY (  [ Transaction1Id ]  )

2.テーブルのキーを変更する (ほかのフィールドが DBMS の Null 値を許容する場合)

Transaction1 テーブルのキーを変更する場合 (N(5) を N(6) に変更するなど)、ALTER TABLE は実行できません。この場合、一時テーブルが作成され、データは最適化手法で一時テーブルにコピーされます:
INSERT INTO GXA0001 (a, b, c) SELECT a, b, c FROM Transaction1
Transaction1 テーブルに、[ Nullable ] プロパティ - 項目属性 = True の項目属性がある場合、上記の最適化は実行できません。そのため、データを 1 つのテーブル (Transaction1) から照会するカーソルと、他のテーブルに挿入するもう 1 つ別のカーソルを定義する形でコピーが行われます。

3.有効な項目属性名または有効なテーブル名の長さを拡張する

たとえば、次の設定を変更します。
再編成の構成は次のとおりです:
  • 項目属性名を新しい長さにして一時テーブルを作成
  • 古いテーブルから新しい一時テーブルにレコードをコピー
  • テーブル名を新しい名前に変更
  • テーブルの整合性の制限を更新

その他の場合

  • [ nullable ] プロパティを Yes から No に変更
  • Informix の例 - rgz0005 が指定されている場合
  • Oracle の例 - 1 つのテーブルのデータをロードするために複数のテーブルがナビゲートされる場合
  • Informix の例 - ロードされるテーブル自体がナビゲートしなければならない場合




サブページ
Created: 14/09/18 03:13 by Admin Last update: 21/05/21 04:33 by Admin
カテゴリ
Powered by GXwiki 3.0