17.00 - 17.05 - UDMのインストール - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

UDMを作成してテストした後に、それをサーバーにインストールできます。

一般に、SYSLIBやSYSUDTLIBなどのTeradataシステム データベースでは、UDF、UDM、または外部ストアド プロシージャを作成しません。これらのデータベースは、主にTeradataシステムのUDF、UDT、UDM、および外部ストアド プロシージャのみで使用され、通常これらシステムの外部ルーチンを非常に多く含んでおります。ユーザーがこれらのデータベース内で外部ルーチンを作成、変更、または削除するたびに、Teradataはユーザーのルーチンを、システムの外部ルーチンのすべてのオブジェクトに再リンクしなければなりません。さらに、ユーザーのルーチンを実行するため、Teradataはシステム外部ルーチンが参照するすべての共有ライブラリをロードする必要があり、これらのライブラリがユーザーのルーチンに関連しない場合があります。これは極めて非効率的です。ただし、ユーザー自身が、システム データベース内にUDFを作成しなければならない場合もあることに注意してください。例えば、行レベル セキュリティに使用されるUDFは、SYSLIBデータベース内に存在する必要があります。

CREATE METHOD文

ソース コードのファイル名と位置を指定して、それをサーバーにインストールするには、CREATE METHOD文を使用します。

メソッドがコンパイルされ、メソッドの属するデータベースに関連するダイナミック リンク ライブラリ(DLLまたはSO)とリンクされ、システム内のTeradata Databaseのすべてのノードに配布されます。

特定のデータベース内で定義されているすべてのUDMは、単一のダイナミック リンク ライブラリにリンクされます。

デフォルト パスと一時パス

作成時と実行時にUDMを管理するためにTeradata Databaseで使用されるデフォルト パスと一時パスは、UDFおよび外部ストアド プロシージャ用に使用されるデフォルト パスおよび一時パスと同じです。例えば、UDF、UDM、および外部ストアド プロシージャのコンパイルでは、同じ一時ディレクトリが使用されます。

デフォルト パスと一時パスの詳細は、デフォルト パスと一時パスを参照してください。

ソース ファイルの位置の指定

CREATE METHOD文のEXTERNAL句には、ソース コード ファイルの名前とパスを指定します。

CREATE METHODの句 説明
EXTERNAL メソッド ソースがクライアント上の現行ディレクトリまたはデフォルト ディレクトリにあり、それ以外のファイルをインクルードする必要がない場合に、EXTERNAL句を使用します。

ソース名は、CREATE METHODキーワードの直後の名前です。

クライアント
  • ワークステーション接続の場合、BTEQは、ソース名に適切なファイル拡張子を付加してソース ファイルを検索します。
  • メインフレーム接続の場合、ソース名はDDNAMEファイル名でなければなりません。

以下に、toInches.cという名前のソース コード ファイルの例を示します。

CREATE METHOD toInches()
RETURNS FLOAT
FOR meter
EXTERNAL;
EXTERNAL NAME method_name ソースがクライアント上の現行ディレクトリまたはデフォルト ディレクトリにあり、それ以外のファイルをインクルードする必要がない場合に、EXTERNAL method_name句を使用します。

ソース名はmethod_nameと同じです。

クライアント
  • ワークステーション接続の場合、BTEQは、method_nameに適切なファイル拡張子を付加してソース ファイルを検索します。
  • メインフレーム接続の場合、method_nameはDDNAMEファイル名でなければなりません。

以下に、meter_toInches.cという名前のソース コード ファイルの例を示します。

CREATE METHOD toInches()
RETURNS FLOAT
FOR meter
EXTERNAL NAME meter_toInches;
EXTERNAL NAME 'string' 'string'には次のものの名前と位置を指定します。
  • 関数のソース(サーバー上のヘッダー ファイル、オブジェクト ファイル、ライブラリ、およびパッケージを含む)
  • 関数のソース(クライアント上のヘッダー ファイルおよびオブジェクト ファイルを含む)
クライアント
  • ワークステーション接続の場合、BTEQは、必要に応じて名前にファイル拡張子を付加してファイルを検索します。
  • メインフレーム接続の場合、名前はDDNAMEファイル名でなければなりません。

サンプルは次のとおりです。

CREATE METHOD toInches()
RETURNS FLOAT
FOR meter
EXTERNAL NAME 'CS!toInches!udmsrc/toInches.c!F!meter_toInches';
説明
  • 'string'中の!は区切り文字を示します。
  • 'string'中のCはクライアントから入手したソースを示します。
  • 'string'中のSは、後続の2セットの区切り文字の間の情報が、CまたはC++関数ソース ファイルの名前と位置を識別することを示します。
  • 'string' toInchesは、サーバーがソースをコンパイルするために使用する名前(ファイル拡張子なし)を示します。
  • 'string'中のudmsrc/toInches.cは、ソース ファイル(toInches.c)の相対パス(udmsrc)を示します。
  • 'string'中のFは、次の区切り文字の後の情報がCまたはC++関数名を識別することを示します。
  • 'string'中のmeter_toInchesは、次の区切り文字の後の情報がCまたはC++関数名を示します。

CREATE METHODとEXTERNAL句の詳細は、<Teradata Vantage™- SQLデータ定義言語 - 詳細トピック、B035-1184>を参照してください。

ODBCでのソース ファイルの位置

ODBCを使用する場合、サーバーに保存されたファイルからUDMのみを作成できます。

JDBCでのソース ファイルの位置

Teradata JDBCインターフェース ドライバを使用すると、Teradata Databaseサーバー上にあるファイルまたはクライアント上にあるリソースからUDMを作成することができます。

クライアント側のUDMソース ファイルは、クラス パスのリソースとして使用できなければなりません。Teradata JDBCドライバにより、クライアントのファイル システムに直接アクセスすることなく、クラス パスからリソースをロードしてサーバー ノードに転送することができます。

C/C++関数名の指定

CREATE METHOD文中のEXTERNAL句は、ソース コードの場所を指定する以外に、C/C++関数宣言内に出現するC/C++関数名、またはC/C++のソースではなくC/C++のオブジェクトが指定された場合には関数のエントリ名を指定します。

CREATE METHODの句 結果
EXTERNAL C/C++関数名は、CREATE METHODキーワードの後の名前と一致していなければなりません。

次のようなCREATE METHOD文があるとします。

CREATE METHOD toInches()
RETURNS FLOAT
FOR meter
EXTERNAL;

CまたはC++関数名はtoInchesでなければなりません。

クライアントがメインフレーム接続の場合、C/C++関数名はソースのDDNAMEでなければなりません。

EXTERNAL NAME method_name C/C++関数名はmethod_nameと一致していなければなりません。

次のようなCREATE METHOD文があるとします。

CREATE METHOD toInches()
RETURNS FLOAT
FOR meter
EXTERNAL NAME meter_toInches;

C/C++関数名は、meter_toInchesでなければなりません。

クライアントがメインフレーム接続の場合、method_nameはソースのDDNAMEでなければなりません。

EXTERNAL NAME 'string' 'string'には、C/C++関数名を指定するFオプションを含めることができます。

次のようなCREATE METHOD文があるとします。

CREATE METHOD toInches()
RETURNS FLOAT
FOR meter
EXTERNAL NAME 'CS!toInches!udmsrc/toInches.c!F!meter_toInches';

C/C++関数名は、meter_toInchesでなければなりません。

'string'にFオプションが含まれていない場合、C/C++関数名は、CREATE METHODキーワードの後の名前と一致していなければなりません。

非標準インクルード ファイルの指定

UDMに非標準のヘッダー ファイルをインクルードする場合は、CREATE METHOD文のEXTERNAL句に、そのヘッダー ファイルの名前とパスを指定する必要があります。

ヘッダー ファイルssn.hをインクルードしている次のようなUDMがあるとします。

/*****  C source file name: p_ssn.c  *****/

#define SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include "ssn.h"

void encrypt( UDT_HANDLE    *personalUdt,
              VARCHAR_LATIN *result,
              char           sqlstate[6])
{
     ...
}

以下に、非標準のヘッダー ファイルの名前とパスを指定したCREATE METHODの例を示します。

CREATE METHOD encrypt()
RETURNS VARCHAR(64)
FOR personal
EXTERNAL NAME
'CI!ssn!udm_home/ssn.h!CS!encrypt!udm_home/p_ssn.c!F!encrypt';

説明

EXTERNAL NAMEに続く文字列 指定内容
! 区切り文字。
C ヘッダー ファイルをクライアントから入手する。
I 後続の2セットの区切り文字の間の情報が、インクルード ファイル(.h)の名前と位置を識別する。
ssn ヘッダー ファイルの名前(ファイル拡張子なし)。
udm_home/ssn.h クライアント上のヘッダー ファイルのパスと名前。
C ソースをクライアントから入手する。
S 後続の2セットの区切り文字の間の情報が、CまたはC++関数ソース ファイルの名前と位置を識別する。
encrypt サーバーがソースをコンパイルするために使用する名前(ファイル拡張子なし)。
udm_home/p_ssn.c ソース ファイルのパスと名前。
F 次の区切り文字の後の情報がCまたはC++関数名を識別する。
encrypt CまたはC++関数名。

ライブラリのインストールの詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE METHOD」を参照してください。

関連トピック

詳細情報 参照先
CREATE METHOD文 Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144
UDTとUDMに適用される権限 Teradata Vantage™ - データベースの管理、B035-1093
データベース内の外部ルーチンの名前と数に影響するLinuxの制限 Argument list too long