Итак, я попробовал массовое обновление, чтобы скопировать значения из столбца uemte_id в pp_terminal таблице в столбец uemte_id (нуль при запуске) в таблице mm_chip. Эти две таблицы не имеют столбцов в common.This не то, что я использовал:Массовое обновление из одной таблицы в другую
declare
type ue_tab is table of
pp_terminal.uemte_id%type;
ue_name ue_tab;
cursor c1 is select uemte_id from pp_terminal;
begin
open c1;
fetch c1 bulk collect into ue_name;
close c1;
-- bulk insert
forall indx in ue_name.first..ue_name.last
update mm_chip set uemte_id = ue_name(indx);
end;
/
И это сообщение об ошибке я получаю:
Error report:
ORA-00001: unique constraint (DPOWNERA.IX_AK7_MM_CHIP) violated
ORA-06512: at line 13
00001. 00000 - "unique constraint (%s.%s) violated"
*Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
For Trusted Oracle configured in DBMS MAC mode, you may see
this message if a duplicate entry exists at a different level.
*Action: Either remove the unique restriction or do not insert the key.
Видите ли вы какие-либо очевидные misstakes?
Да, вы нарушаете уникальное ограничение при обновлении 'mm_chip'. Я предполагаю, что у вас есть ограничение, которое включает 'uemte_id'? – Ben
Да, но я не вижу, как я его нарушаю, так как все uemte_ids в pp_terminal уникальны, а uemte_ids в mm_chip - null. – Baklavaman
Джим Хадсон только что дал вам хорошее объяснение. В качестве дополнительной заметки вы не фиксируете или не закрываете курсор в блоке PL/SQL; хотя это может быть просто вопрос с копией и вставкой, и стоит сделать это, если вы этого не сделаете. – Ben