UDMの本体は、CまたはC++プログラミング言語を使用して開発します。
ソース コードの内容
- SQL_TEXT定数の定義
- sqltypes_td.hヘッダー ファイルのインクルード
- CREATE TYPE文のMETHOD指定の中で指定されているパラメータ受渡し規則に定められた順序でのパラメータ リストの定義
内部データと外部データ
すべてのデータは、UDMに対してローカルです。メソッドの呼び出しの間でグローバル データは保持されません。ただし、GLOPデータだけは例外です。GLOPデータの使用について詳しくは、グローバル持続データを参照してください。
UDMに静的変数を含めることはできません。
UDM内で、静的定数を使用することはできます。
I/O
以下のルールが入出力に適用されます。
UDMの動作 | UDMでの規則 |
---|---|
非保護実行モードで実行される場合 | 標準入出力およびネットワーク入出力を含む、すべての入出力を実行できません。 |
保護実行モードで実行される場合 | 入出力を実行するか、オペレーティング システムと対話して、オペレーティング システムがファイル ハンドルやオブジェクト ハンドルなどのリソースを保持するようにできます。 このメソッドは、'tdatuser'オペレーティング システム ユーザーの許可の下で別個のプロセスとして実行されます。 メソッドは、完了前にオープンしているリソースを解放する(つまり、ハンドルを閉じる)必要があります。 保護実行モードの詳細については、保護モードでの実行を参照してください。 |
CREATE METHOD文またはREPLACE METHOD文にEXTERNAL SECURITY句が指定されている場合 | 入出力を実行するか、オペレーティング システムと対話して、オペレーティング システムがファイル ハンドルやオブジェクト ハンドルなどのリソースを保持するようにできます。 このメソッドは、CREATE AUTHORIZATION文またはREPLACE AUTHORIZATION文によって確立された特定のネイティブ オペレーティング システム ユーザーの許可の下で別個のプロセスとして実行されます。 メソッドは、完了前にオープンしているリソースを解放する(つまり、ハンドルを閉じる)必要があります。 |
シグナル処理
SIGUSR2のシグナルはTeradata Databaseにより予約されているため、Linuxシステム上で実行されているUDMは、SIGUSR2のシグナルの使用や処理の変更はできません。
C標準ライブラリ関数
非保護モードで実行するUDMでは、文字列ライブラリ関数など、Cの標準ライブラリ関数のうち、入出力機能を使用しないものを呼び出すことができます。
mallocやfreeなど、いくつかの関数には制限があります。
詳細については、<C標準ライブラリ関数の使用>を参照してください。
Teradataライブラリ関数
Teradataには、UDM開発で使用できる関数がいくつか用意されています。例えば、FNC_GetDistinctValue関数を使用することにより、UDMに関連付けられているDISTINCT型の値を取得することができます。
詳細については、<Cライブラリ関数>を参照してください。
システムV IPCおよびPOSIX IPCの使用上の問題
Teradataは、UDF、UDM、および外部ストアド プロシージャにシステムV IPC、またはセマフォー、ミューテックス、条件変数および共有メモリなどのPOSIX IPCを使用しないことをお勧めしております。 Teradata Cライブラリは、これらのIPCリソースの割り当てや割り当て解除用のFNC関数は提供しておりません。 セッション アボートや予期せぬイベントが原因で、Teradataが外部ルーチンの実行スレッドやプロセスを中断する場合には、これらのIPCリソースがシステム内でクリーンアップされずに残る恐れがあります。 まれなケースとして、これによりシステムのハングやOSリソースのリークが生じることがあります。
exit()システム呼び出しを使用した場合の影響
UDMからはexit()を呼び出さないでください。
- UDMを呼び出したリクエストはロール バックされます。
- サーバー プロセスが終了します。次のUDMのためにサーバー プロセスを再作成する必要があるため、新たなオーバーヘッドが発生します。