Вопрос

Я хочу сбросить колонку под названием 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 и Case 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; библиотеки =*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 Navigator, точнее, его «запуск SQL Scripts» (он обычно здесь -> «%Program Files% IBM Client Access Shared Cwbundbs.exe ").

Но, прежде всего, вы должны добавить параметр ответа системы (Только один раз за машину)

Addrpyle seqnbr (1500) msgid (cpa32b2) rpy ('i')

Это делается на «зеленом экране». Это устанавливает Deafult ответа ('i') на сообщении CPA32B2. CPA32B2 - это внутренний массажный идентификатор, который связан с операцией столбца.

(На самом деле это не должно быть сделано в «зеленом экране», используйте его как команда chgjob. Пример:

CL: addrpyle seqnbr (1500) msgid (cpa32b2) rpy ('i');

)

Теперь вы можете начать «запустить SQL Scripts», первая команда для запуска - это:

CL: chgjob inqmsgrpy (*sysrpyl);

Это меняет текущий параметр работы Inqmsgrpy, к *sysrpyl. *Sysrpyl заставляет посмотреть, существует ли существующий параметр ответа системы, когда следует отобразить сообщение о запросе.

Теперь вы можете запустить свой альтер, который бросает столбец.


К сожалению, я не знаю, как сбросить колонку, просто используя 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 будет подсказывать, если это то, что я действительно хочу сделать.

Чтобы получить данные, я использую клиент Squirrel SQL с драйвером JT400 JDBC ... так что я думаю, с системой, настаивающей на подсказке (и на самом деле нет способа получить подсказку даже без STRSQL), она не позволит мне это сделать Анкет

Так что я думаю, что я застрял, делая то, что делаю ... Создавая новую таблицу и копирую данные, а затем обмениваясь таблицами.

Единственный способ, которым я нашел, чтобы заставить JDBC работать, - это сначала вручную изменить по умолчанию для этого сообщения. Затем запустите приложение обновления. В нашем случае мы используем ликибаз. Я мог бы получить команду Java, чтобы вызвать addrpyle и chgjob inqmsgrpy ( * sysrpyl), но на самом деле он никогда не допускал столбца «Отбросить таблицу» * не дать следующую ошибку:

Ошибка:

10 -- A cancel reply to an inquiry message was received.

Рабочая команда:

CHGMSGD MSGID(CPA32B2) MSGF(QSYS/QCPFMSG) DFT('I')

Ссылка:

Зеленый экран - Strsql даст вам ошибку MSG, чтобы ответить

ALTER TABLE DEVLIBSC/TRKLST DROP COLMN "ST"

Изменение файла TRKLST может привести к потере данных. (CI)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top