2011-06-10 76 views
0

我正在维护一个遗留应用程序,最近我联系过人们在尝试填充我们的一个oracle表时遇到错误消息。现在,这些oracle表并不在我们的意料之中,但我仍然想尝试一些东西来帮助找到问题。Oracle唯一约束错误信息

不管怎样,错误消息如下:

值java.sql.SQLException:ORA-00001:唯一约束(REO0 PK_TableName)违反:

我知道我可以找到很多的通过谷歌和这里关于这个错误信息在线信息。这不是我的问题所在。

问题是:此处所示(我把以粗体显示)的表名,是 表的名称,或者是 PK_部分添加到表示“主键”?

原因,我想问的是:我不能直接得到这个数据库,但不知何故,我可以看到REO0所有的表,我可以找到一个与表名却没有一个与* PK_TableName *作为名称为一张桌子。因此,如果这个PK_引用类似“主键”(违反约束的东西),那么它会更有意义。

回答

5

PK_tablename是约束的名称,并作为的好评亚历克斯·普尔状态,它已经在指定的DDL(CREATE TABLE ... (columns, CONSTRAINT PK_tablename PRIMARY KEY(columns...)),或ALTER TABLE ... ADD CONSTRAINT PK_tablename PRIMARY KEY(columns...)CREATE UNIQUE INDEX PK_tablename ON ... (columns)为例)。如果没有给出名称,Oracle会生成一个以SYS开头的名称。

请注意,通常PK_x为表x提供了一个主键,但您的约束也可能是外键约束或非空约束。

下面的查询将告诉你:

SELECT * FROM all_constraints WHERE constraint_name = 'PK_TABLENAME' 
+0

名称由谁创造了它分配的(除非它是一个默认的'SYS $'名),它是使用'PK_ '常见的模式。但它只是一个手动维护的数据标准,所以你应该查询'ALL_CONSTRAINTS'表来检查它确实指的是''。我不清楚命名是否是自动的,并且我已经看到他们出于某种原因失去了一些独特之处... – 2011-06-10 08:52:07

+0

谢谢,我使用了这个,发现了一些更有用的信息在all_constraints中。表名确实是PK_之后的表名。 – Yoh 2011-06-10 09:28:30