2013-09-12 3 views
1

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

ORA-017779 : cannot modify a column which maps to non key-preserved table.

Моего код:

UPDATE (SELECT SOBS034.T1 as OLD, SOBS063.T1 as NEW 
      FROM SOBS034 
      INNER JOIN SOBS063 ON SOBS034.ID = SOBS063.ID 
      where SOBS034.ID='111000' AND SOBS063.T2='') t 
SET t.OLD =t.NEW 

ответ

3

обновить JOIN, потребность Oracle чтобы быть абсолютно уверенным, что для каждой строки таблицы, которую вы пытаетесь обновить, будет не более одной строки объединенной таблицы.

Здесь вы сможете обновить присоединиться тогда и только тогда, когдаSOBS063.ID является уникальным (явно объявлен уникальным ограничением/рк).

Если какой-то SOBS063.ID уникален для этой записи с условием соединения, но не объявлен как таковой, вы не сможете использовать этот метод. Однако вы могли бы превратить этот DML в эквивалентную MERGE, что-то вроде этого:

MERGE INTO SOBS034 a 
USING SOBS063 b 
ON (a.id = b.id AND a.ID='111000' AND b.T2 IS NULL) 
WHEN MATCHED THEN UPDATE SET a.t1 = b.t1; 

Кстати SOBS063.T2='' никогда не верно в Oracle прямо сейчас.

+0

спасибо за ваш ответ. Но я снова получаю эту ошибку. "ORA-00905 Отсутствует ошибка". – suhtite

+0

Вы не указали: инструкция CREATE TABLE, инструкция INSERT, поэтому я не могу вам помочь –

2

Попробуйте создать уникальный индекс для SOBS034 (ID) и SOBS063 (ID).

+0

Определение уникального индекса не имеет ничего общего с ошибкой –

+0

@a_horse_with_no_name Почему бы и нет ... Я видел это много раз .. , – SriniV