如何更改具有约束的iSeries的表?获取“*文件中的文件”。错误
-
01-10-2019 - |
题
我在iSeries(IBM-I/AS400)上有一个有一些约束的表。该表是用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)并没有真正改变现有表,而是正在创建新的表并复制数据,这可能是痛苦所带来的。
但是,有没有办法可以暂停钥匙然后在Alter之后恢复它们?
(不涉及使用SQL进行此操作或建议创建表的答案首先是没有帮助的,因为它们在这里不适用...)
解决方案
答案是:我错过了这样一个事实,一个桌子上有一个外国钥匙指向该桌子的锁。或者,更直截了当:我是个白痴!
其他提示
做 启用或禁用参考约束 帮助?
不隶属于 StackOverflow