Comment modifier un tableau iSeries qui a des contraintes? Obtenir « * Fichier utilisé. » Erreur

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

  •  01-10-2019
  •  | 
  •  

Question

J'ai une table sur un iSeries (IBM-i / AS400) qui a des contraintes. La table est créée avec SQL comme si, avec une poignée de clés étrangères reliant d'autres tables à cette table (SQL réelle a été un peu brouillées ici):

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;

Maintenant, beaucoup plus tard, je devrai modifier cette table pour ajouter un champ:

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

Quels sont les résultats dans ce message:

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

J'ai vérifié et il n'y a certainement pas de verrou d'objet sur la table en ce moment. Quand je vérifie la joblog, je vois ceci:

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.  

Maintenant, je pouvais de supprimer cours et rajoutez les contraintes en question, mais je me sens comme cela ne devrait pas être nécessaire. La colonne J'ajoute n'a rien à voir avec les contraintes. Je crois que c'est probablement en raison du fait que, en fait, OS400 (i5 / OS) ne modifie vraiment la table existante, mais est à la place de créer une nouvelle table et la copie des données dans et qui est sans doute où la douleur vient.

Mais est-il un moyen de suspendre éventuellement les clés, puis les reprendre après l'autel?

(Les réponses qui ne concernent pas le faire avec SQL ou suggèrent de créer différemment la table en premier lieu ne sont pas utiles car ils ne sont pas applicables ici ...)

Était-ce utile?

La solution

La réponse est: j'ai raté le fait qu'il y avait un verrou sur l'une des tables qui avaient une clé étrangère pointant vers cette table. Ou, plus crûment: Je suis un idiot

scroll top