-4742 THE STATEMENT CANNOT BE EXECUTED BY DB2 OR IN THE ACCELERATOR (REASON reason-code)
説明
Db2® またはアクセラレーター・サーバーでステートメントを実行できません。
以下の条件が当てはまる場合は、Db2 でステートメントを実行できません。
- 特殊レジスター CURRENT GET_ACCEL_ARCHIVE は YES に設定されており、ステートメントはアクセラレーター・サーバーのみに保管されているデータにアクセスする必要がある。
- 特殊レジスター CURRENT QUERY ACCELERATION が ALL に設定されているため、ステートメントをアクセラレーター・サーバーで実行する必要がある。
- 参照された関数は、アクセラレーター・サーバーのみで実行できる。 MEDIAN 関数は、アクセラレーター・サーバーのみで実行できます。
- ステートメントがアクセラレーター専用表を参照している。
理由コードによって示されている条件が当てはまる場合は、アクセラレーター・サーバーでステートメントを実行できません。
- reason-code
- アクセラレーター・サーバーでステートメントを実行できない理由に関する追加情報を提供する数値。注: アクセラレーターでステートメントを実行できない理由について詳細情報が必要な場合は、EXPLAIN ステートメントを発行して、表 DSN_QUERYINFO_TABLE の出力を調べてください。可能な値は以下のとおりです。
- 1
- ステートメントの実行時に、アクティブなアクセラレーター・サーバーが検出されませんでした。
- 2
- 特殊レジスター CURRENT QUERY ACCELERATION が NONE に設定されています。
- 4
- 照会が読み取り専用ではありません。
- 6
- カーソルが、スクロール可能として定義されているか、行位置カーソルです。
- 7
- 照会で、複数のコード化スキームが使用されています。
- 8
- 照会の FROM 節で、data-change-table-reference を指定しています。
- 9
- 照会に、ネストされた表の式が含まれています。
- 10
- 照会に、共通表式に対する再帰的参照が含まれています。
- 11
- 照会に、サポートされない機能が含まれています。
- 12
- 照会が、次のいずれかの特性がある表を参照しています。
- アクセラレーター・サーバーで定義されていない
- 照会内の他の表とは異なるアクセラレーター・サーバーで定義されている
- アクセラレーター・サーバーで定義されているが、照会の加速が有効になっていない
- 13
- 照会で参照されている表が含まれるアクセラレーター・サーバーが、開始されていません。
- 14
- データがアクセラレーター・サーバーにロードされた後で、照会で参照されている列が Db2 で変更されました。
- 15
- 照会では DB2® 10 以降でのみ使用できる機能が使用されていますが、この機能はアクセラレーター・サーバーでサポートされていません。
- 17
- 照会は INSERT from SELECT ステートメントです。サブシステム・パラメーター QUERY_ACCEL_OPTIONS で、オプション 2 を指定しておらず、INSERT from SELECT ステートメントの加速が有効になっていません。
- 18
- 照会では Db2 11 以降でのみ使用できる機能が使用されていますが、この機能はアクセラレーター・サーバーでサポートされていません。
- 19
- アクセラレーター・サーバーが、正しいレベルでなく、SQL ステートメント内の関数をサポートしていません。
- 20
- 照会は、行セット・カーソルで WITH RETURN であると宣言されているか、リモートで実行されるか、または SQL PL ルーチンの下で実行されます。
- 21
- 照会に、加速に関してはサポートされていない相関副照会が含まれています。
- 22
- ステートメントがアクセラレーター専用表を参照していますが、このステートメントはオフロード可能ではありません。例:
- MERGE ステートメントがアクセラレーター専用表を参照しています。
- UPDATE または DELETE ステートメントがアクセラレーター専用表を参照していますが、UPDATE または DELETE のターゲット表は、通常の Db2 表である UPDATE DB2_TABLE SET .. (SELECT .. FROM ACCEL_ONLY_TABLE) です。
- 副選択を含む行式の INSERT、UPDATE、または DELETE。UPDATE ACCEL_ONLY_TABLE SET (C1, C2) = (SELECT C3®, C4 FROM TABLE2);
- 23
- SELECT INTO ステートメントが加速のためにバインドされていますが、加速に関してサポートされていないリモート SELECT INTO ステートメントとして実行されています。
- 24
- アクセラレーター・サーバーへの接続は更新できないため、DDL または DML ステートメントをオフロードできません。この問題は、2 フェーズ・コミット・リクエスター (例えば、Db2 for z/OS® リクエスター) が、DDL または DML ステートメントをオフロードするために Db2 for z/OS サーバーに接続する場合に発生する可能性があります。
- 25
- ステートメントに、サポートされないデータ・タイプを持つ列への参照が含まれています。
システムの処置
このステートメントを処理することはできません。
プログラマーの応答
理由コードを使用して失敗の原因を判別し、適切な処置を取ってください。
- 1
- アクセラレーター・サーバーを開始してください。
- 2
- 特殊レジスター CURRENT QUERY ACCELERATION を ENABLE、ENABLE WITH FAILBACK、ELIGIBLE、または ALL に設定してください。
- 4
- 照会が、読み取り専用照会に関する基準を満たしていることを確認してください。DECLARE CURSORの読み取り専用カーソルに関する情報を参照してください。
- 6
- カーソル宣言から SCROLL 節か WITH ROWSET POSITIONING 節を削除してください。
- 7
- 照会が参照しているすべてのオブジェクトのコード化スキームが同じであることを確認してください。
- 8
- 照会の FROM 文節を書き直して、data-change-table-reference 節が含まれないようにしてください。
- 9
- 照会の FROM 節に副照会が含まれていないことを確認してください。
- 10
- 照会の FROM 節が共通表式を参照していないことを確認してください。
- 11
- サポートされない機能を照会から削除してください。
- 12
- 照会で参照されているすべての表が同じアクセラレーター・サーバー内にあり、すべての表で照会の加速が有効になっていることを確認してください。
- 13
- 照会で参照されている表が含まれるアクセラレーター・サーバーを開始してください。
- 14
- 変更された表をアクセラレーター・サーバーに再ロードしてください。
- 15
- アクセラレーター・サーバーによってサポートされていない機能を照会で使用していないことを確認してください。
- 17
- サブシステム・パラメーター QUERY_ACCEL_OPTIONS を更新してオプション 2 を組み込み、INSERT from SELECT ステートメントの加速を有効にしてください。
- 18
- アクセラレーター・サーバーによってサポートされていない機能を照会で使用していないことを確認してください。
- 19
- アクセラレーター・サーバーを更新し、関数テキストまたは式テキストが含まれる SQL ステートメントの加速を有効にしてください。QUERY_ACCEL_OPTIONS 値が正しく指定されていることを確認してください。 オプション 4 と 7 に特に注意してください。正しく設定されていないと、戻りコード 19 で -4742 が出される可能性があります。
- 20
- 行セット・カーソル照会の使用を変更できない場合、QUERY ACCELERATION NONE を使用してください。
- 21
- 加速に関してサポートされていない相関副照会を JOIN 式として書き直してください。 例については、IBM Db2 Analytics Accelerator for z/OS が相関副照会を処理する方法を参照してください。
- 22
- ステートメントがアクセラレーター専用表を参照しないようにしてください。あるいは、アクセラレーター専用表を Db2 表に置き換えて、その照会を Db2 で実行できるようにします。
- 23
- SELECT INTO ステートメントを削除するか、バインド・オプション QUERYACCELERATION(NONE) を使用してパッケージの REBIND を実行してください。
プログラムが SQL PL プロシージャーまたは関数の場合は、BIND または REBIND PACKAGE を使用する代わりに以下のいずれかの方式を使用してください。
- ALTER PROCEDURE または ALTER FUNCTION を使用して、プロシージャーまたは関数を変更します。
- プロシージャーまたは関数をドロップしてから、CREATE PROCEDURE または CREATE FUNCTION を使用して再作成します。
- 24
- Db2 for z/OS サーバーから、または 2 フェーズ・コミット・プロトコルを必要としないリクエスター (例えば、IBM® Data Server Driver for JDBC) から、DDL または DML ステートメントを直接発行します。
- 25
- サポートされないデータ・タイプを持つ列への参照を削除します。
SQLSTATE
560D5