Я пытаюсь написать процедуру PL/SQL, которая будет искать существующий первичный ключ «поставщик_ид» из таблицы поставщика и заменять его новым. Первичный ключ «поставщик_ид» также является внешним ключом для нескольких других таблиц. Поэтому мне нужно также обновить расположение внешних ключей. Вот процедура я написал для решения этой проблемы:Замена первичного ключа PL SQL
create or replace PROCEDURE ex5b_supplier_update(supplier_id_delete IN VARCHAR2,
supplier_id_update IN VARCHAR2) IS
CURSOR supplier_cursor IS
SELECT supplier_id
FROM supplier;
supplier_row supplier_cursor%rowtype;
BEGIN
OPEN supplier_cursor;
LOOP
FETCH supplier_cursor INTO supplier_row;
EXIT WHEN supplier_cursor%notfound;
IF ex5b_supplier_exist(supplier_id_delete) THEN
UPDATE supplier
SET supplier_id = supplier_id_update
WHERE supplier_id = supplier_id_delete;
UPDATE PURCHASE_ORDER
SET supplier_id = supplier_id_update
WHERE supplier_id = supplier_id_delete;
UPDATE PRODUCT
SET supplier_id = supplier_id_update
WHERE supplier_id = supplier_id_delete;
DBMS_OUTPUT.PUT_LINE('UPDATED');
ELSE
DBMS_OUTPUT.PUT_LINE('NOT UPDATED');
END IF;
END LOOP;
CLOSE supplier_cursor;
END;
Процедура дает мне следующее сообщение об ошибке:
Error starting at line : 2 in command - BEGIN ex5b_supplier_update('S500','S600');
END;
Error report - ORA-02292: integrity constraint (SYSTEM.PRODUCT_FK) violated - child record found ORA-06512: at "SYSTEM.EX5B_SUPPLIER_UPDATE", line 15 ORA-06512: at line 2 02292. 00000 - "integrity constraint (%s.%s) violated - child record found" *Cause: attempted to delete a parent key value that had a foreign dependency. *Action: delete dependencies first then parent or disable constraint.
Что делает общий смысл вы не можете удалить первичный ключ, который используется как внешний ключ. Но я также не могу изменить внешние ключи, у которых нет первичных ключей.
Таким образом, мой вопрос заключается в том, как я могу изменить имя поставщика и все его внешние ключи одновременно, чтобы избежать этой ошибки?
1. Вставьте новый родительский элемент. 2. Обновите детей до нового родителя. 3. Удалите старый родитель. Надежда никто не добавил нового ребенка между шагами 2 и 3. Или отложенные ограничения. –