Таблица отношений многие ко многим Не работает, не может удалить значение из этого - PullRequest
0 голосов
/ 03 февраля 2019
declare
begin
  for i in (select aid ,address from address)
  loop
    for j in (select aid ,address from address )
    loop
      if i.address=j.address then
        if i.aid!=j.aid then
          update employee_add 
          set aid=i.aid 
          where aid=j.aid;
          delete from address 
          where aid=i.aid;
        end if;
      end if; 
    end loop;
  end loop;
end;
/

Этот код отлично работает как for loop.После этого отображается сообщение об ошибке: ------

* Причина. Значение внешнего ключа не соответствует значению первичного ключа.
* Действие: Удалить внешний ключ или добавить соответствующий первичный ключ.key.

У меня есть таблицы employee[eid (primary key) ,ename], address[aid (primary key),address] и таблица отношений многих ко многим employee_add[eid,aid].Пожалуйста помоги!Заранее благодарен:)

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете использовать только один оператор loop и variables (v_address и v_aid) для сравнения строк, как в блоке ниже:

declare
  v_address address.address%type;
  v_aid     address.aid%type;  
begin
 for i in (select aid ,address from address order by aid)
 loop  
    if nvl(v_address,'')=i.address then 
         update employee_add set aid=v_aid where aid=i.aid;  
         delete address where aid=i.aid;
    else
       v_address := i.address;
       v_aid := i.aid;   
    end if;
  end loop;
end;
...