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