制約のある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.

私はチェックしました、そして、この時点でこのテーブルには間違いなくオブジェクトロックはありません。 Joblogをチェックすると、これがわかります。

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でこれを行うことを伴わない、またはそもそもテーブルの作成は、ここでは適用されないので役に立たないことを提案する回答...)

役に立ちましたか?

解決

答えは、そのテーブルを指し示す外部キーがあるテーブルの1つにロックがあるという事実を見逃しました。または、もっと率直に言ってください:私はばかです!

他のヒント

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top