Как ИЗМЕНИТЬ таблицу iSeries с ограничениями? Использование *FILE. ошибка

У меня есть таблица на iSeries (IBM-i/AS400), которая имеет некоторые ограничения. Таблица создается с помощью SQL таким образом, с несколькими внешними ключами, связывающими другие таблицы с этой таблицей (реальный SQL здесь немного запутан):

CREATE TABLE ABCLIB.ABCDE (
  DEIDN INTEGER NOT NULL WITH DEFAULT, 
  DETTL VARGRAPHIC (50) ALLOCATE(25), 
  DETYP CHAR (1) NOT NULL WITH DEFAULT);

ALTER TABLE ABCLIB.ABCDE ADD PRIMARY KEY (DEIDN);

ALTER TABLE ABCLIB.ABCFG ADD FOREIGN KEY (FGDEK) 
  REFERENCES ABCLIB.ABCDE (DEIDN) 
  ON DELETE RESTRICT ON UPDATE RESTRICT;

ALTER TABLE ABCLIB.ABCHI ADD FOREIGN KEY (HIDEK) 
  REFERENCES ABCLIB.ABCDE (DEIDN) 
  ON DELETE RESTRICT ON UPDATE RESTRICT;

Теперь, намного позже, мне нужно будет изменить эту таблицу, чтобы добавить поле:

ALTER TABLE ABCLIB.ABCDE ADD COLUMN DEICN VARGRAPHIC (100) ALLOCATE(50)     

Что приводит к этому сообщению:

Row or object ABCDE in ABCLIB type *FILE in use.

Я проверил, и в настоящее время в этой таблице определенно нет блокировок объектов. Когда я проверяю журнал заданий, я вижу это:

Constraint cannot be removed from file Q_AT000000.    
Constraint(s) not removed from file Q_AT000000.       
File ABCDE in ABCLIB not changed.                 
Row or object ABCDE in ABCLIB type *FILE in use.  

Теперь я мог бы, конечно, удалить и снова добавить рассматриваемые ограничения, но я чувствую, что в этом нет необходимости. Добавляемый столбец не имеет ничего общего с ограничениями. Я полагаю, что это, вероятно, является результатом того факта, что на самом деле OS400 (i5/OS) на самом деле не изменяет существующую таблицу, а вместо этого создает новую таблицу и копирует данные, и, вероятно, именно здесь возникает боль.

Но есть ли способ приостановить действие ключей, а затем возобновить их после изменения?

(Ответы, которые не предполагают выполнение этого с помощью SQL или в первую очередь предлагают создать таблицу по-другому, бесполезны, поскольку они здесь неприменимы...)


person jwl    schedule 27.08.2010    source источник


Ответы (2)


Ответ таков: я упустил тот факт, что на одной из таблиц был заблокирован внешний ключ, указывающий на эту таблицу. Или, говоря более прямо: я идиот!

person jwl    schedule 27.08.2010
comment
Что вы сделали, чтобы это исправить? - person dalcorta; 20.05.2021