質問
呼ばれる列をドロップしたいです id
これは自動増加PKです。
SQL:
alter table "CO88GT"."XGLCTL" drop column id cascade;
そして、私は得ます:
Error: [SQL0952] Processing of the SQL statement ended. Reason code 10.
SQLState: 57014
ErrorCode: -952
私は間違っている可能性がありますが、テーブルがデータを失うのを防ぐことと関係があると思います。この問題を回避するには、列なしで新しいテーブルを作成し、古いテーブルからデータを新しいテーブルにコピーしてから、古いテーブルを新しいテーブルに置き換える必要があります。
解決
情報
AS400は、データの損失の可能性があるため、警告(問い合わせメッセージ)を提供しています。要求された操作をキャンセルまたは無視するように求めています。したがって、これがインタラクティブなリクエストであることのビーセは、JDBC/ODBCを介して「I」と入力して無視することはできません。また、エラーコード:-952を使用してSQLSTATE:57014およびReason Code 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エラーが自明でない場合は、パラメーターと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を使用できない場合、もう1つのソリューションは、iseries Navigatorを使用して、正確に「sqlスクリプト」を正確に使用することです(通常はここにあります - > "%プログラムファイル% 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は、問い合わせメッセージを表示するときにシステムの返信パラメーターが存在するかどうかを確認します。
これで、列をドロップするAlterを実行できます。
残念ながら、JDBCを使用するだけで、列をドロップする方法がわかりません。誰かが知っているなら、私に知らせてください。
参考文献:
他のヒント
最後に解決策を見つけました:
CALL QSYS2.QCMDEXC('ADDRPYLE SEQNBR(1500) MSGID(CPA32B2) RPY(''I'')');
CALL QSYS2.QCMDEXC('CHGJOB INQMSGRPY(*SYSRPYL)');
ALTER TABLE <tablename> DROP COLUMN <column_name>;
エラーメッセージには十分な情報がありませんが、主要な列をドロップすることは一般に非常に危険であり、データベースが正しく困難になります。
おそらく、その列を含む外部のキーの制約があります。
制約をドロップしないでください。自分が何をしているのかわからない限り、その列を削除しないでください。
この投稿によると: http://bytes.com/topic/db2/answers/185467-drop-column-table
緑色の画面環境でstrsqlを使用して列をドロップすることができます。私はこれにアクセスできますが、それは機能しますが、400を持つクライアントにはStrsQLを使用するライセンスプログラムがありません。問題は、これが私が本当にやりたいことである場合、strsqlが促すことです。
JT400 JDBCドライバーでリスSQLクライアントを使用しているデータを取得するために...プロンプトを主張するシステムで(そして実際にはstrsqlなしでもプロンプトを取得する方法はありません)、それは私にそれをさせません。
だから私は自分がやっていることをしているのではないかと思います...新しいテーブルを作成し、データをコピーしてからテーブルを交換します。
JDBCを機能させるために私が見つけた唯一の方法は、最初にこのメッセージのデフォルトを手動で変更することです。次に、更新アプリケーションを実行します。私たちの場合、リキバーゼを使用します。 JavaのCommandCallを取得してAddrpyleとChgjob inqmsgrpy( * sysrpyl)を呼び出すことができましたが、実際にAlter Table *ドロップ列 *がフォローエラーを与えないことは許可されませんでした。
エラー:
10 -- A cancel reply to an inquiry message was received.
作業コマンド:
CHGMSGD MSGID(CPA32B2) MSGF(QSYS/QCPFMSG) DFT('I')
参照:
緑の画面-SRSQLは、回答するためにエラーMSGを与えます
Alter TableDevlibsc/trklstドロップ列「St」
ファイルtrklstの変更により、データが失われる可能性があります。 (CI)