2015-03-19 2 views
1

Я получил две таблицы:Обновление порядка детской записи

Родительские

| id |

Детский

| id | владелец | Заказать |

владелец является иностранным ключом, ссылающимся на идентификатор родителя. Существует ограничение уникальности на (владелец, ordernr)

Теперь, есть некоторые пробелы в порядке и я пытаюсь исправить их следующим образом:

CREATE OR REPLACE VIEW myView AS 
(SELECT childid, ordernr, n 
    FROM (SELECT child.id as childid, ordernr, ROW_NUMBER() OVER (PARTITION BY parent.id ORDER BY ordernr) AS n 
     FROM Parent, Child WHERE owner = parent.id) 
WHERE ordernr <> n) 

UPDATE 
(SELECT c.ordernr, n 
FROM Child c, myView WHERE childid = c.id) t 
SET t.ordernr = t.n 

Но я получаю: ORA-01779: не может изменить столбец, который отображает до ключа сохранившихся таблиц, не

ответ

1

ORA-01779: не может изменить столбец, который отображает на не ключевые сохранившиеся таблицы

этой ошибка произойдет когда вы пытаетесь использовать столбцы INSERT или UPDATE в представлении соединения, которые сопоставляются с таблицей, не содержащей ключей.

Вы можете использовать MERGE.

Например,

MERGE INTO child c 
USING (SELECT n 
     FROM myview) t 
ON (t.childid = c.id) 
WHEN matched THEN 
    UPDATE SET c.ordernr = t.n 

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