Как добавить каскадное удаление в Oracle, когда внешний ключ находится на той же таблице - PullRequest
3 голосов
/ 08 апреля 2011

У меня есть таблица, которая содержит дерево в оракуле.

MY_TABLE
node_id
parent_id

Как добавить каскадное удаление, если у корня дерева нет родителя?

Прямо сейчас для родительского идентификатора установлено значение -1 для корня. Когда я пытаюсь это сделать, я получаю следующую ошибку:

Error starting at line 1 in command:
ALTER TABLE regional_defaults_working
add CONSTRAINT regional_defaults_wk_delete
  FOREIGN KEY (parent_id)
  REFERENCES  regional_defaults_working(node_id)
  ON DELETE CASCADE
Error report:
SQL Error: ORA-02298: cannot validate (XVTEST.REGIONAL_DEFAULTS_WK_DELETE) - parent keys not found
02298. 00000 - "cannot validate (%s.%s) - parent keys not found"
*Cause:    an alter table validating constraint failed because the table has
           child records.

Ответы [ 2 ]

4 голосов
/ 08 апреля 2011

Я не могу вспомнить, сработает ли это или нет, но мой первый импульс - сказать set parent_id = NULL для корня.

1 голос
/ 08 апреля 2011

Разобрался.

Ключ (без каламбура) состоит в том, чтобы сделать ваш parent_id обнуляемым, а затем установить для корня значение null.

...