EXTERNAL BODY REFERENCE句 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

必須のEXTERNAL BODY REFERENCE句では、外部プロシージャがTeradata Databaseの外部にあることを宣言し、実行に必要なすべてのファイル構成要素の場所を示します。

すべてのプロシージャ構成要素の場所を指定するために外部プロシージャ名だけでは不十分な場合、それらの各要素へのパスを明示的に指定する文字列リテラルも指定する必要があります。

いずれの場合にも、SQLリクエストからプロシージャを呼び出すときに指定する識別子はprocedure_nameです。

オプションで、この句に対して以下のオプションのいずれかまたは両方を指定できます。
  • 外部プロシージャ名
  • パラメータ形式
外部プロシージャ名を指定する方法はいくつかあります。詳細については、以下を参照してください。
Javaプロシージャの場合、外部文字列リテラルはJARファイル、そのJAR内のJavaクラス、外部ルーチンをシステムが実行するときに呼び出すクラス内のJavaメソッドを指定します。
  • 文字列リテラル指定の最初の部分はJAR名またはIDです。これは、関連付けられたJARファイルの登録名です。名前は、外部プロシージャSQLJ.Install_Jarで作成または指定されます。
  • 文字列リテラル指定の2番目の部分は、コロンの後で指定されますが、実行するJavaメソッドを含むJAR内に含まれているJavaクラスの名前です。
  • 文字列リテラル指定の3番目の部分は、実行されるメソッド名です。

例えば、salesreportsという名前でデータベースに登録されたJARファイルと、そのJAR内でformalという名前を付けられたクラスがあり、呼び出されるクラス内のメソッドにはmonthendという名前が付けられているとします。

JAR、Javaクラス、およびJavaクラス メソッドのこの場所指定は、次の外部文字列リテラルで完全に指定されます。

'salesreports:formal.monthend'

Javaメソッド名は、このJava外部プロシージャを作成するデータベース内で固有になっている必要があります。

また、外部本体参照のJavaパラメータ宣言リストを指定し、Javaメソッドの特定の実装のシグネチャを指定することもできます。この指定は、システムがJavaメソッドのいくつかの実装の中から選択する必要がある場合に必須です。Javaパラメータ リストは、Javaデータ型のカンマ区切りリストを指定します(SQLとJavaの間のデータ型マッピングおよび<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照)。

Javaデータ型名について、次の点に注意してください。
  • 大文字と小文字が区別されます。
  • パッケージ名で完全修飾されます。

以下の表は、CまたはC++言語で記述された外部ルーチンのこの句に指定できる内容を示しています。

CREATE PROCEDUREに指定する句 結果
EXTERNAL CまたはC++プロシージャ名は、CREATE PROCEDUREキーワードの後の名前と一致しなければなりません。

次のCREATE PROCEDURE文について考えます。

CREATE PROCEDURE GetRegionXSP
  (INOUT region VARCHAR(64))
LANGUAGE C
NO SQL
EXTERNAL
PARAMETER STYLE TD_GENERAL;

Cプロシージャ名はGetRegionXSPでなければなりません。

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

EXTERNAL NAME external_procedure_name CまたはC++プロシージャ名はprocedure_nameと一致しなければなりません。

次のCREATE PROCEDURE文について考えます。

CREATE PROCEDURE GetRegionXSP
  (INOUT region VARCHAR(64))
LANGUAGE C
NO SQL
EXTERNAL NAME xsp_getregion
PARAMETER STYLE TD_GENERAL;

Cプロシージャ名はxsp_getregionでなければなりません。

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

EXTERNAL NAME 'string' 'string'は、Fオプションを指定することによって、CまたはC++プロシージャ名を指定できます。

Java外部プロシージャの場合、EXTERNAL NAME 'string'値ではなく、外部Java参照文字列を指定する必要があります。

インクルード、ライブラリ、オブジェクト、パッケージ、ソースのファイル名も指定しなければ、Fオプションをstringに指定することはできません。Teradata Databaseは、リンク先としてこれらのファイル名を1つ以上必要とします。

次のCREATE PROCEDURE文について考えます。

CREATE PROCEDURE GetRegionXSP
  (INOUT region VARCHAR(64))
LANGUAGE C
NO SQL
EXTERNAL NAME 'CS!getregion!xspsrc/      getregion.c!F!xsp_getregion'
PARAMETER STYLE TD_GENERAL;

C関数名はxsp_getregionでなければなりません。

'string'にFオプションが含まれない場合は、C/C++/Javaプロシージャ名はCREATE PROCEDURE文で指定したプロシージャ名と一致させる必要があります。

Java外部プロシージャの例を編集するには、CおよびC++外部プロシージャに使用される指定形式の代わりにJAR参照文字列を指定する必要があります。

例えば、Java外部プロシージャの次のプロシージャ定義について考えてみましょう。

CREATE PROCEDURE myclobdiagret2 (IN  b CLOB)
LANGUAGE JAVA
MODIFIES SQL DATA
PARAMETER STYLE JAVA
EXTERNAL NAME 'user_jar:UnitTest.myclobdiagret2';

この例のEXTERNAL NAME句は、カンマ区切りの関数エントリ名、CまたはC++ライブラリ名などではなく、JAR名、パッケージ名、Javaクラス名をそれぞれ指定します。外部Java参照文字列およびTeradata Vantage™- SQL外部ルーチン プログラミング、B035-1147を参照してください。

外部プロシージャのパラメータ形式は、この句またはOPTIONAL FUNCTION CHARACTERISTICS句のどちらにも指定できますが、外部プロシージャのパラメータ形式を指定できるのは定義の中で一度だけです。詳細については、PARAMETER STYLE句を参照してください。