1

我在 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 执行此操作或建议首先以不同方式创建表的答案没有帮助,因为它们不适用于此处......)

4

2 回答 2

4

The answer is: I missed the fact that there was a lock on one of the tables that had a foreign key pointing to that table. Or, put more bluntly: I am an idiot!

于 2010-08-27T23:04:54.350 回答
0

Does Enabling or disabling referential constraints help?

于 2010-08-27T22:51:16.817 回答