Как изменить таблицу на iSeries, которые имеют ограничения? Получение «* файл в использовании». ошибка

StackOverflow https://stackoverflow.com/questions/3588615

  •  01-10-2019
  •  | 
  •  

Вопрос

У меня есть стол на 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.

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

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 или предложить создание таблицы по-разному в первую очередь не полезно, поскольку они не применимы здесь ...)

Это было полезно?

Решение

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

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