Ответ 1
Информация
AS400 дает вам предупреждение (запрос) из-за возможной потери данных, прося вас отменить или проигнорировать запрошенную операцию. Таким образом, поскольку это является интерактивным запросом, над JDBC/ODBC вы не можете вводить "I" для игнорирования, а AS выдает код ErrorCode: -952 с 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 не является самоочевидной, вы можете сделать соединение JDBC с параметром errors = full ", что даст гораздо больше информации об ошибке. Для других параметров подключения см. this.
пример строки подключения:
JDBC: as400://имя_сервер, библиотеки = * LIBL, именование = система ошибка = полный
С этим соединением результирующая ошибка будет выглядеть так:
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 Navigator, а именно "Run SQL-скрипты" (обычно здесь → "% Program Files%\IBM\Client Access\Shared\cwbundbs.exe" ).
Но прежде всего вам нужно добавить параметр системного ответа (только один раз на машину)
ADDRPYLE SEQNBR (1500) MSGID (CPA32B2) RPY ('I')
Это делается в "зеленом экране". Это задает глухой ответ ('I') в сообщении запроса CPA32B2. CPA32B2 - это внутренний идентификатор массажа, который привязан к операции с колонтитулом.
(Фактически это не нужно делать в "зеленом экране", используйте его как команду CHGJOB. Пример:
cl: ADDRPYLE SEQNBR (1500) MSGID (CPA32B2) RPY ('I');
)
Теперь вы можете запустить "Запуск сценариев SQL", первая команда для запуска:
cl: CHGJOB INQMSGRPY (* SYSRPYL);
это изменяет текущий параметр задания INQMSGRPY на * SYSRPYL. * SYSRPYL вызывает просмотр, существует ли системный параметр ответа, когда должно отображаться сообщение запроса.
Теперь вы можете запустить свой alter, который удаляет столбец.
К сожалению, я не знаю, как удалить столбец, используя JDBC. Если кто-то знает, пожалуйста, дайте мне знать.
Литература: