アプリケーション開発: サーバー・アプリケーションのプログラミング

共通言語ランタイム (CLR) プロシージャーによる複数の結果セット

共通言語ランタイム (CLR) プロシージャーによって戻される結果セットの最大数は限定されています。この限度は、DB2 .NET データ・プロバイダーが接続内で同時に開いてサポートできる DB2DataReader オブジェクトの最大数によって決定されます。並行アクティブ・データ・リーダー・サポートにより、接続内で複数の DB2DataReader オブジェクトを開くことができます。こうして、CLR プロシージャーから複数の結果セットが戻されます。

共通言語ランタイム (CLR) ルーチン実行制御モード (EXECUTION CONTROL 節)

データベース管理者またはアプリケーション開発者は、実行時のルーチンのアクションを制限することにより、DB2 Universal Database(TM) (UDB) 外部ルーチンに関連したアセンブリーを、望まない改ざんから保護する必要があります。 DB2(R) .NET CLR ルーチンは、実行時にルーチンがどのタイプのアクションの実行を許可されるかを識別する、実行制御モードの指定をサポートします。 実行時に DB2 UDB は、ルーチンがその指定された実行制御モードの有効範囲を越えてアクションを実行しようとしたかを検出することができます。これは、アセンブリーが危害を受けていないかどうかを判断する際に役立ちます。

CLR ルーチンの実行制御モードを設定するには、ルーチンの CREATE ステートメント内のオプションの EXECUTION CONTROL 節を指定します。 有効なモードは以下のとおりです。

既存の CLR ルーチンの実行制御モードを変更するには、ALTER PROCEDURE または ALTER FUNCTION ステートメントを実行します。

CLR ルーチンに EXECUTION CONTROL 節が指定されていない場合は、デフォルトで、CLR ルーチンは最も制限の厳しい実行制御モードである SAFE を使用して実行されます。 この実行制御モードを指定して作成されたルーチンは、データベース・マネージャーによって制御されるリソースにのみアクセスできます。 制限がより緩やかな実行制御モードでは、ルーチンはローカル・ファイル・システム上 (FILEREAD または FILEWRITE) またはネットワーク上のファイルにアクセスすることができます。 実行制御モード UNSAFE は、ルーチンの動作に制限を設けないことを指定します。UNSAFE 実行制御モードを定義されたルーチンは、バイナリー・コードを実行できます。

これらの制御モードは、許容されるアクションの階層を表しており、高い水準のモードには、それより下の階層において許可されるアクションが含まれます。 例えば、実行制御モード NETWORK では、ルーチンはネットワーク上のファイル、ローカル・ファイル・システム上のファイル、およびデータベース・マネージャーによって制御されるリソースにアクセスできます。 可能な限り最も制限が厳しい実行制御モードを使用するようにし、UNSAFE モードの使用は避けてください。

DB2 UDB が実行時に、CLR ルーチンがその実行制御モードの有効範囲外でアクションを試行していることを検出した場合、DB2 UDB はエラー (SQLSTATE 38501) を戻します。

EXECUTION CONTROL 節は、LANGUAGE CLR ルーチンに対してのみ指定できます。 EXECUTION CONTROL 節の適用度の有効範囲は、.NET CLR ルーチン自体に限定され、それが呼び出す他のルーチンには拡張されません。

共通言語ランタイム (CLR) ルーチンにおける最大の 10 進数精度および位取り

DB2 Universal Database (UDB) における DECIMAL データ・タイプは、31 桁の精度と 28 桁の位取りで表記されます。 .NET CLR System.Decimal データ・タイプは、29 桁の精度と 28 桁の位取りに限定されます。 したがって、DB2 UDB 外部 CLR ルーチンは System.Decimal データ・タイプ変数に、(2^96)-1 (29 桁の精度と 28 桁の位取りを使用して表記できる最高値) より大きい値を割り当ててはなりません。 そのような値を割り当てると、DB2 UDB はランタイム・エラーを発します (SQLSTATE 22003、SQLCODE -413)。

ルーチン CREATE ステートメントの実行時に、DECIMAL データ・タイプ・パラメーターが 28 より大きい位取りで定義されている場合、DB2 UDB はエラーを発します (SQLSTATE 42611、SQLCODE -604)。

[ ページのトップ |前ページ | 次ページ | 目次 ]