为什么以下SQL语句无法在DB2 for z / OS上运行?

时间:2010-12-16 07:41:33

标签: sql db2

下面的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”

感谢。

1 个答案:

答案 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语句执行。