接続の確立
Java外部ストアド プロシージャがSQLを実行する前に、"jdbc:default:connection"をjava.sql.DriverManager.getConnection()メソッドに渡して、データベースへのデフォルトの接続を確立しなければなりません。
デフォルト接続は、外部ストアド プロシージャが実行されているセッションにSQLを送付します。
- 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外部ストアド プロシージャをマルチスレッド化することはできません。