17.10 - 外部文字列リテラル - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)

外部文字列リテラルでは、UDFの作成に必要な構成要素のエンコードされたリストを指定します。この文字列は、デコードされた時点で、各構成要素が何であり、どこに存在するかを示します。

それぞれのUDFの必要に応じて、以下の構成要素を指定することもできます。

システムはコード パスに基づいて、指定先のファイルにアクセスしてから、そのファイルに適切な拡張子を付けてプラットフォーム上のUDFコンパイル ディレクトリに転送します。

次の文字は区切り文字として使用しないでください。区切り文字ではなく、パス文字列の構成要素として解釈される可能性があります。
  • / (SOLIDUS)
  • \ (REVERSE SOLIDUS)
  • : (COLON)

指定のパス文字列全体で同じ区切り文字を使用する必要があります。

Vantageは、ソース コードまたはオブジェクト コードを要求するときに、指定のクライアントまたはサーバーでソース構成要素を検索します。システムは関数エントリ ポイント名の構成要素をディクショナリに保存してから、その名前を使用して関数を呼び出します。

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++関数エントリ ポイント名オプション以外のオプションと併用できません。