照合順序の定義

通常、GT.Mは、ASCII値順に、最初に数値で、次にシーケンス文字列が続くデータを順序づけます。代替照合順序を使用するために、以下の項目は、GT.Mプロセスの初期化時の処理で提供されている必要があります。

代替シーケンスのルーチンを保持する共有ライブラリを作成

代替照合順序のための共有ライブラリは、次の4つのルーチンが含まれている必要があります。

  1. gtm_ac_xform_1:代替照合シーケンスにサポートされる文字列の最大長に添字を変換、または

    gtm_ac_xform :代替照合シーケンスに32,767バイトに添字を変換

  2. gtm_ac_xback_1:オリジナルの添字表現に戻って代替照合キーに変換するgtm_ac_xform_1を使用、または

    gtm_ac_xback:オリジナルの添字表現に戻って代替照合キーに変換する gtm_ac_xform で使用

  3. gtm_ac_version:照合ルーチンの "現在アクティブ" なセット用の数値バージョンの識別子を返します。

  4. gtm_ac_verify:与えられたバージョン番号で照合順序の一致に、成功(奇数)または失敗(偶数)を返します。

GT.Mは、gtm_ac_xform と gtm_ac_xback ルーチンを検索する前に、gtm_ac_xform_1 と gtm_ac_xback_1 のための共有ライブラリを検索します。もし共有ライブラリが gtm_ac_xform_1 を含む場合、もしそれが存在する場合であっても、GT.Mは gtm_ac_xform を無視します。もしGT.Mが gtm_ac_xform_1を見つけるが、しかし、gtm_ac_xback_1 を見つけない場合は、追加の不一致の警告 GTM- E- COLLFNMISSING で GTM- E- COLLATIONUNDEF エラーを報告します。

もしアプリケーションが32767バイトより大きい文字列をを使用していない場合は、代替照合ライブラリは gtm_ac_xform_1 と gtm_ac_xback_1 ルーチンを含む必要はありません。一方、もしアプリケーションが32,767バイトより大きい文字列を(ただし最大サポートの文字列の長さより少ない)を渡し、gtm_xc_xform_1 と gtm_xc_xback_1 を提供しない場合 、GT.Mはランタイムエラー GTM- E- COLLARGLONG を発行します。

データベースのキーサイズは、ローカル・キーサイズよりもGT.Mによってはるかに制限されており、ユーザー設定によってさらに制限される場合があることに注意してください。

環境変数の定義

GT.Mは、 n は照合順序を識別する1から255までの整数である環境変数 gtm_collate_n を介して代替照合シーケンスを検索し、そして、パス名(pathname)はその照合順序のためのルーチンを含んでいる共有ライブラリを識別します、例えば:

$ gtm_collate_1=/opt/fis-gtm/collation
$ export gtm_collate_1

複数の代替照合順序の定義は共存が可能です。

代替照合を確立する場合の 留意点

グローバルにデータが含まれていない時に、グローバルのための代替照合シーケンスをセットする必要があります。グローバルに定義されている時は、照合順序はグローバルに格納されています。これはグローバルの照合の将来的な完全性を保証します。データを含んでいるグローバルの照合順序を変更する必要が生じた場合は、データを一時リポジトリにコピーし、グローバルを削除し、必要な照合を持つ領域または%GBLDEFを持つ領域にグローバルを再初期化して変数の照合順序を変更し、一時リポジトリからデータを復元します。

変換と逆変換のルーチンを作成するときには注意してください。変換ルーチンは、明確かつ確実にすべての入力可能な値をエンコードする必要があります。逆ルーチンはすべてのケースでオリジナルの値を正確に戻す必要があります。これらのルーチン内のエラーは、デバッグが困難となる遅延症状を引き起こすことがあります。これらのルーチンは、Mには書き込まれないことがあります。

デフォルトデータベースの照合メソッドの定義

GT.Mは、新しいデータベースを作成する際のデフォルトとして、代替照合シーケンスを定義できます。続いて、このデフォルトは、それぞれの新しいグローバルが作成されるときに適用されます。

このデフォルトの照合順序は、次のCHANGEを使っての参考例を使用してGDE修飾子として、ADD, CHANGE, TEMPLATEコマンドをセットされます。

GDE>CHANGE -REGION DEFAULT -COLLATION_DEFAULT=<0-255>

この修飾子は、常に領域に適用され、データベースが MUPIP CREATE を使用して作成されたときに有効になります。GDE SHOWの出力は、この値が表示され、DSE DUMP -FILEHEADER もこの情報を含みます。代替のデフォルトの照合シーケンスがない場合に、使用されるデフォルト値は0、またはASCIIです。

いったんデータベースファイルが作成されると、値は変更することはできません、そして、データベースファイルの寿命まで有効です。同じ制限は、照合順序のバージョンに適用されます。照合シーケンスの実装のバージョンは、データベースのファイルヘッダ( fileheader)にも格納され、ファイルを再作成する以外に変更はできません。

もしデータベースが作成された時に使用中の照合シーケンスを利用できなくなって照合シーケンスのコードを変更する場合には、データベースの継続的な妥当性を確認するために次の手順を使用してください。古い互換性のある照合ルーチンを使用してデータベースをMUPIP EXTRACTし、次に、再作成し、新しい照合ルーチンを使用してMUPIP LOAD します。

ローカルの照合順序を確立する

プロセスのすべての添字付きローカル変数は、同じ照合シーケンスを使用する必要があります。ローカル変数で使用される照合シーケンスは、デフォルトとして、または、現在のプロセスで確立することができます。プロセスが定義されている添字付きローカル変数を持っていない時に、ローカル照合シーケンスは変更だけすることができます。

デフォルトのローカル照合シーケンスを確立するには、照合テーブルの1つを選択するために環境変数 gtm_local_collate に数値を提供します、例えば:

$ gtm_local_collate=n
$ export gtm_local_collate

ここで、n は、gtm_collate_n 形式の環境変数によって定義される有効な照合番号と一致する照合シーケンスの番号です。

アクティブなプロセスは、ローカル変数の添字のため照合シーケンスを定義するには、%LCLCOLユーティリティを使用することができます。%LCLCOLは、これらの外部エントリポイントがあります:

set^%LCLCOL(n) は、n で指定されたタイプにローカルの照合を変更します。

もし照合シーケンスが利用できない場合、ルーチンは false(0)を返し、ローカルの照合シーケンスを変更しません。

例:

IF '$$set^%LCLCOL(3) D
. Write "local collation sequence not changed",!Break

このコードの一部では、外部関数として使用される $$set^LCLCOL を示しています。もしローカル照合シーケンスが3にセットされていない場合は、エラーメッセージを書き込み、BREAKします。

set^%LCLCOL(n,ncol) は、照合タイプ n で使用される null 照合のタイプを決定します。

  • もし ncol の真理値がFALSE(0)の場合は、ローカル変数は、GT.M標準の null 照合を使用します。

  • もし ncol の真理値がTRUE(1)の場合は、ローカル変数は、M標準の null 照合を使用します。

代替照合オーダーを変更せずに維持している間に、set^%LCLCOL(,ncol)を使用して、 null 照合オーダーは変更が可能です。もし添字付きローカル変数が存在する場合は、null の照合オーダーは変更できません。この場合、GT.MはGTM- E- COLLDATAEXISTSを発行します。

get^%LCLCOL は、現在のローカルタイプを返します。

例:

GTM>Write $$get^%LCLCOL
0

この例では、効果的なローカル照合シーケンスが、標準Mの照合シーケンスであることを示す、0を返す外部関数として $$get^%LCLCOL を使用しています。

もし set^%LCLCOL が指定されていなくて、gtm_local_collate が定義されている場合、または、無効である場合、プロセスはM標準の照合を使用します。以下は、無効な値としてみなされます:

  • 0より小さい値

  • 255より大きい値

  • プロセスがアクセスできない正規の照合シーケンス

アクセス不能は、欠落している環境変数、欠落しているイメージ、またはアクセスのセキュリティの拒否によって、引き起こされる可能性があります。

inserted by FC2 system