2011-06-10 104 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