2016-01-03 2 views
0

У меня возникла проблема с моей процедурой ниже. У меня есть записи для разных номеров позиций (порядковых номеров), которые были куплены несколько раз. Когда я возвращаю часть покупки на основе номера позиции, она должна удалить запись из таблицы items и вставить данные элемента в таблицу с именем «deleted_items». Проблема заключается в том, что я удаляю часть заказа один раз за раз, табличные deleted_Items придет с этой ошибкой:уникальное ограничение (% s.% S) нарушено

ORA-06512: at line 4 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.

create or replace PROCEDURE RET_Item(Item_no number(5)) 
      AS 
     CURSOR Return_i 
      IS 
     SELECT * FROM Items 
     WHERE item_num = Item_no 
     AND Item_num IN (SELECT Item_num FROM deleted_items); 
    cur1 Return_i%ROWTYPE; 
    BEGIN  
    OPEN Return_i; 
    LOOP 
    FETCH Return_i INTO cur1; 
    EXIT WHEN Return_i%NOTFOUND; 
    IF cur1.Delivered IS NOT NULL THEN 

    Insert into deleted_itmes values(
     cur1.Order_No,cur1.Item_num,cur1.Delivered,User,sysdate, 
      'Item_returned'); 

    DELETE FROM Items WHERE Item_num = Item_no ; 
    DELETE FROM Purchase where Item_num = Item_no; 
    DBMS_OUTPUT.PUT_LINE('Item number ' || Item_no ||' deleted! '); 
    ELSIF cur1.Delivered IS NULL THEN 
    DBMS_OUTPUT.PUT_LINE('Cannot return item: '|| cur1.Item_num); 
    END IF; 
    END LOOP; 
CLOSE Return_i; 
END RET_item; 

товары Таблица

  Order_No  Item_num  Delivered 
     ---------- ----------  --------- 
      1001   1234  12-JUN-15   
      1002   5678  01-JAN-15 
      1003   9087  05-FEB-15 

Покупка Таблица

   Order_No  Item_num  Quantity 
      ---------- ---------- --------------- 
       1001  1234   10 
       1001  9087   7 
       1002  9087   10 
       1003  1234   1 
       1003  5678   12 

Deleted_Item Таблица

товары Таблица

 Order_No Item_num Delivered Name_on-order Date_of_Ret Status 
+0

Вы можете оставить DDL для таблицы Items? – Nick

+0

Я обновил свой вопрос, надеюсь, что это поможет! –

ответ

0

Неясно из кода, в какой таблице вы вставляете в .. Вы могли бы вставить все заявление INSERT?

При вставке в таблицу DELETED_ITEMS, то почему бы вам нужен

AND Item_num IN (SELECT Item_num FROM deleted_items) 

Если это не будет

AND Item_num NOT IN (SELECT Item_num FROM deleted_items) 
+0

Вставка будет удаленных элементов! Я сделал NOT IN, но проблема в том, что когда у меня есть заказ 1001 с номером Item let say 1234, который имеет две покупки 1111 и 2222. Если 1001 удалил номер покупки 2222, детали этого заказа будут удалены из таблицы Items и будет вставлен в таблицу deleted_Items для этого конкретного порядка. Однако, если заказ 1001 должен удалить покупку 1111, тогда это не будет удалено из-за NOT IN в подзапросе! –

+0

@ Doodi - Немного неясно, основываясь на ваших комментариях выше. Не могли бы вы разместить до и после снимков своих данных, чтобы уточнить, что необходимо? – vmachan

+0

Хорошо, мне очень жаль, что я не очень хорошо объясняю себя, но буду включать все необходимое и обновить свой вопрос. –

Смежные вопросы