情報
AS400 は、データ損失の可能性があるため警告 (問い合わせメッセージ) を表示し、要求された操作をキャンセルまたは無視するよう求めています。したがって、これは対話型の要求であるため、JDBC/ODBC では「I」と入力して無視することはできず、AS は ErrorCode: -952 with SQLState: 57014 および理由コード 10 をスローします。
SQL0952のドキュメントには次のように書かれています。
Message Text: Processing of the SQL statement ended. Reason code &1.
Cause Text: The SQL operation was ended before normal completion. The reason code is &1. Reason codes and their meanings are:
* 1 - An SQLCancel API request has been processed, for example from ODBC.
* 2 - SQL processing was ended by sending an exception.
* 3 - Abnormal termination.
* 4 - Activation group termination.
* 5 - Reclaim activation group or reclaim resources.
* 6 - Process termination.
* 7 - An EXIT function was called.
* 8 - Unhandled exception.
* 9 - A Long Jump was processed.
* 10 - A cancel reply to an inquiry message was received.
* 11 - Open Database File Exit Program (QIBM_QDB_OPEN).
* 0 - Unknown cause.
JDBC を使用していて、SQL エラーが自明ではない場合は、パラメーター ' errors=full ' を使用して JDBC 接続を作成できます。これにより、エラーに関するより多くの情報が得られます。その他の接続パラメーターについては、こちらを参照してください。
接続文字列の例:
jdbc:as400://serverName;libraries=*libl;naming=system; エラー=フル;
その接続では、結果のエラーは次のようになります。
Error: [SQL0952] Processing of the SQL statement ended. Reason code 10.
Cause . . . . . : The SQL operation was ended before normal completion.
The reason code is 10.
Reason codes and their meanings are:
1 -- An SQLCancel API request has been processed, for example from ODBC.
2 -- SQL processing was ended by sending an exception.
3 -- Abnormal termination.
4 -- Activation group termination.
5 -- Reclaim activation group or reclaim resources.
6 -- Process termination.
7 -- An EXIT function was called.
8 -- Unhandled exception.
9 -- A Long Jump was processed.
10 -- A cancel reply to an inquiry message was received.
11 -- Open Database File Exit Program (QIBM_QDB_OPEN).
0 -- Unknown cause.
Recovery . . . : If the reason code is 1, a client request was made to cancel SQL processing. For all other reason codes, see previous messages to determine why SQL processing was ended.
SQLState: 57014
ErrorCode: -952
ソリューション
最後に、STRSQL を使用できない場合、別の解決策として iSeries ナビゲーターを使用する方法があります。正確には「SQL スクリプトの実行」です (通常はここにあります --> 「%Program Files%\IBM\Client Access\Shared\cwbundbs.exe」)。 」)。
ただし、最初にシステム応答パラメーターを追加する必要があります (マシンごとに 1 回のみ) 。
ADDRPYLE SEQNBR(1500) MSGID(CPA32B2) RPY('I')
これは「グリーン スクリーン」で行われます。これにより、CPA32B2 照会メッセージにデフォルトの応答 ('I') が設定されます。CPA32B2 は内部メッセージ ID であり、列のドロップ操作に関連付けられています。
(実際には「グリーン スクリーン」で実行する必要はありません。CHGJOB コマンドのように使用します。例:
cl: ADDRPYLE SEQNBR(1500) MSGID(CPA32B2) RPY('I');
)
これで、「SQL スクリプトの実行」を開始できます。最初に実行するコマンドは次のとおりです。
cl: CHGJOB INQMSGRPY(*SYSRPYL);
これにより、現在のジョブ パラメータINQMSGRPYが *SYSRPYL に変更されます。*SYSRPYL は、照会メッセージを表示する必要がある場合に、システム応答パラメーターが存在するかどうかを調べます。
これで、列を削除する変更を実行できます。
残念ながら、JDBC を使用するだけで、列を削除する方法がわかりません。誰かが知っているなら、私に知らせてください。
参考文献: