使用上の注意 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/rin1593638965306.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

接続の確立

Java外部ストアド プロシージャがSQLを実行する前に、"jdbc:default:connection"をjava.sql.DriverManager.getConnection()メソッドに渡して、データベースへのデフォルトの接続を確立しなければなりません。

デフォルト接続は、外部ストアド プロシージャが実行されているセッションにSQLを送付します。

DriverManager.getConnection()を正常に呼び出してTeradata JDBC Driverにアクセスするには、CREATE PROCEDUREまたはREPLACE PROCEDURE文に、以下のいずれかのデータ アクセス句を指定する必要があります。
  • CONTAINS SQL
  • READS SQL DATA
  • MODIFIES SQL DATA

これらのデータ アクセス句の詳細について、dsq1593709706977.html#fuh1472240849902__CIHCFJEG_xreftargetを参照してください。

上記のデータ アクセス句のいずれかを省略するか、CREATE PROCEDUREまたはREPLACE PROCEDURE文でNO SQL句を指定すると、Java外部ストアド プロシージャのクラス パスでTeradata JDBC Driverが利用できなくなります。DriverManager getConnectionメソッドを呼び出してTeradata JDBC Driverにアクセスしようとすると、「適合ドライバがない」ことを示す例外が発生します。

プロシージャが実行するSQL文の型の制限

外部ストアド プロシージャ(およびストアド プロシージャ)が実行可能なSQL文の型は、CREATE PROCEDURE文またはREPLACE PROCEDURE文で指定されるデータ アクセス句によって制限されます。

CREATE PROCEDUREまたはREPLACE PROCEDURE文での指定 外部ストアド プロシージャ
CONTAINS SQL データベースでSQLデータを読み込んだり変更することはできませんが、CALLなどのSQL制御文を実行できます。
READS SQL DATA SQLデータを変更することはできませんが、SQLデータを読み込むSELECTなどの文を実行できます。
MODIFIES SQL DATA SQLデータを読み込んだり変更するSQL文を実行できます。
外部ストアド プロシージャまたはストアド プロシージャは、呼び出しに使用された、最も制限されたプロシージャのアクセス句に対応する文のみを実行できます。 例えば、以下のような場合について考えてみます。
  • CREATE PROCEDURE文がCONTAINS SQLのデータ アクセス句を指定するJava外部ストアド プロシージャ。
  • CREATE PROCEDURE文がMODIFIES SQL DATAのデータ アクセス句を指定するストアド プロシージャ。

外部ストアド プロシージャがストアド プロシージャを呼び出す場合、呼び出し側は既にCONTAINS SQLデータ アクセス句によって制限されているため、ストアド プロシージャは制御文のみを実行できます。

トリガーから起動された場合にプロシージャが実行可能な文

トリガーが発生した際に呼び出される外部ストアド プロシージャでは、トリガーされたアクションの文として許可されるSQL文のみを実行できます。

他の文を実行しようとすると、データベースによって外部ストアド プロシージャに例外が戻されます。このような例外を受け取る外部ストアド プロシージャでは、エラーを通知して、外部ファイルを閉じるか、確立した接続を切断することができます。アクションは、戻ることしかできません。

例外を受け取った際の外部ストアド プロシージャの状況 トリガーされるリクエストが終了した後の動作
SQLExceptionをスローし、SQLStateフィールドを独自の例外コードに設定して、独自のエラーを戻す 元のエラーの状況は、外部ストアド プロシージャの呼び出し側には通知されません。
SQLExceptionをスローしない システムは、もとの実行失敗情報を呼び出し側に返します。
別のリクエストを実行しようとする 7836エラーが生成されます。 XSP db.nameが、トリガー エラー メッセージを受け取った後にリクエストを実行しました。

トリガーされたアクションの文として許可されるSQL文のリストと詳細については、<Teradata Vantage™- SQLデータ定義言語 - 詳細トピック、B035-1184>のCREATE TRIGGERを参照してください。

制限

SQLを実行するJava外部ストアド プロシージャをマルチスレッド化することはできません。