2012-09-28 28 views
0

我是新來的PLSQL和該命令被搞砸了的東西:PLSQL命令插入到從選擇給出了唯一約束錯誤

insert into coffee_tea_join_table 
select coffee_id, 16 
from coffee_tea_join_table 
where tea_id = 6; 

這會返回一個

「原因:java.sql中。 SQLException:ORA-00001:唯一約束違反了「 」錯誤。

coffee_tea_join_table只有兩列,coffee_id和tea_id。

它看起來像聲明想要再次插入它從它所選擇的同一張表。我猜它會查找coffee_id表,其中相應的tea_id = 6,但爲什麼是那裏的'16'靜態值?沒有'16'列...

如果它找到coffee_id,其中tea_id = 6,那麼爲什麼將它插入到同一個表中又有意義?也許這就是爲什麼違反約束?

+0

最有可能的是它試圖插入16每個coffee_id它有一個tea_id = 6。這意味着這種說法可能不是原因。相反,其他一些腳本在執行之前會插入錯誤的數據... – user1636922

回答

0

首先,我會建議查看您的表的唯一索引和主鍵,然後檢查您的查詢提取了多少記錄。我希望你只能得到1分。如果很多 - 考慮觸發器。可能是他們中的一些壓倒你的16(例如來自錯誤的序列)。無論如何,請向我們提供帶觸發器的表的ddl。

0

如果我們從假設表coffee_tea_join_table有兩列coffee_id和tea_id開始,並且該表具有這兩個表的組合唯一約束。 SQL正在用tea_id = 16和cofee_id創建一條新記錄,與tea_id = 6的記錄相同。然後,​​此錯誤是由於您已經有一條記錄,其中tea_id = 16和cofee_id =相同的cofee_id值作爲茶_id = 6的記錄。

如果這沒有幫助你,那麼你需要挖掘表定義,包括表的唯一約束。