外部文字列リテラルでは、UDFの作成に必要な構成要素のエンコードされたリストを指定します。この文字列は、デコードされた時点で、各構成要素が何であり、どこに存在するかを示します。
- 実行する関数のエントリ ポイント名(FUNCTION ENTRY NAME句を参照)
- インクルード ファイル(CまたはC++ヘッダー ファイル)のパス(INCLUDE NAME句を参照)
- システム ライブラリのパス(LIBRARY NAME句を参照)
- オブジェクト コードのパス(OBJECT FILE NAME句を参照)
- パッケージ(ユーザーが作成したライブラリ)のパス(PACKAGE NAME句を参照)
- ソース コードのパス(SOURCE FILE NAME句を参照)
システムはコード パスに基づいて、指定先のファイルにアクセスしてから、そのファイルに適切な拡張子を付けてプラットフォーム上のUDFコンパイル ディレクトリに転送します。
- / (SOLIDUS)
- \ (REVERSE SOLIDUS)
- : (COLON)
指定のパス文字列全体で同じ区切り文字を使用する必要があります。
Teradata Databaseは、ソース コードまたはオブジェクト コードを要求するときに、指定のクライアントまたはサーバーでソース構成要素を検索します。システムは関数エントリ ポイント名の構成要素をディクショナリに保存してから、その名前を使用して関数を呼び出します。
CまたはC++ソース ファイルのC/C++インクルード ディレクティブに指定したものと同じ名前のインクルード ファイル(C/C++ヘッダー ファイル)があれば、その名前を指定してください(<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照)。
例えば、z/OSクライアントでは以下のようになります。
'CI¡sqltypes_td¡UDFDEFS¡CS¡myudf¡UDFSRC¡F¡theudf'
UDFDEFSとUDFSRCは、z/OSクライアント システム上のファイルのDDNAMEです。コード パスでIBMクライアント ファイルを参照するときには、そのファイルをクライアントDDNAMEで識別する必要があります。
- ファイルUDFDEFSを検索して、udfdefs.hに名前を変えてプラットフォームのUDFコンパイル ディレクトリに保存します。
- UDFSRCを検索して、myudf.cに名前を変えてプラットフォームのUDFコンパイル ディレクトリに保存します。
CまたはC++ソースmyudf.cには、以下のコードが含まれている必要があります。
#include <udfdefs.h>
または
#include "udfdefs.h"
この句では、関数エントリ ポイント名がtheudfであることを示すFオプションも指定します。theudfという名前のCまたはC++ファイルには、以下のような骨組みのコードが必要になります。
void the udf ( ... ) { ... }
ソース、オブジェクト、パッケージ、ライブラリの各ファイルを指定文字列に指定しない限り、Fオプションは指定できません。
以下のような骨組みのCREATE FUNCTION文を指定すると仮定します。省略記号(...)の部分には詳細なコードが入ります。
CREATE FUNCTION abc(...) ... EXTERNAL NAME 'CS!matrix!matrix.c';
この例で、CまたはC++ソース ファイルの名前はmatrix.cであり、関数名abcに基づくCまたはC++関数名には以下のような骨組みのコードが必要です。
void abc(...) { ... }
以下のような骨組みのCREATE FUNCTION文を指定すると仮定します。ここでも、省略記号(...)の部分には詳細なコードが入ります。
CREATE FUNCTION abc(...) ... EXTERNAL NAME 'CO!matrix!matrix.o';
この関数にはソース ファイルがありません。コードはmatrix.oという名前のオブジェクト ファイルです。
このCREATE FUNCTION文を正常にコンパイルするには、abcという名前の指定のオブジェクト ファイルに関数が含まれていなければなりません。
関数名の使用方法の詳細については、外部文字列リテラルの例の最後にあるテーブルを参照してください。
さまざまなオプションを必要な回数だけ指定できますが、パッケージ オプションだけはC/C++関数エントリ ポイント名オプション以外のオプションと併用できません。