下面的SQL语句在DB2 LUW 9.7上运行良好,但无法在DB2 for z / OS 9.1上运行,为什么以及如何使其工作?
CREATE TABLE HIERARCHY_TEST (
HIER_URI VARCHAR(255) NOT NULL,
PARENT_URI VARCHAR(255),
TITLE VARCHAR(1000) NOT NULL,
MIMETYPE VARCHAR(100),
DESCRIPTION VARCHAR(1000),
MODIFIED_BY VARCHAR(1000),
CONSTRAINT PK_SFIND_HIERARCHY PRIMARY KEY (HIER_URI ),
CONSTRAINT FK_ND_HIERARCHY_1 FOREIGN KEY (PARENT_URI) REFERENCES HIERARCHY_TEST ( HIER_URI)
)
我收到的错误消息是“DEV.FIND_HIERARCHY_TEST是一个未定义的名称.SQLCODE = -204,SQLSTATE = 42704,DRIVER = 3.53.71”
感谢。
答案 0 :(得分:4)
此语句在DB2 9.7 for Linux / UNIX / Windows中起作用的原因是因为DB2 9.7添加了一项名为Automatic Revalidation的功能。 DB2 9.1 for z / OS中不存在此功能。
此功能允许您创建依赖于另一个对象的对象,即使父对象尚不存在也是如此。 (即,您可以在尚不存在的表上创建视图,或者在您的情况下,您可以在尚不存在的表上定义外键)。
新创建的对象将无效,DB2将在下次访问时自动重新验证它。此行为由auto_reval
数据库配置参数控制。
正如El Yobo在上面的注释中所指出的,如果需要在两个环境中运行完全相同的语句,则需要从CREATE TABLE中删除外键约束并将其作为单独的ALTER TABLE语句执行。