Нужно исправить запрос на обновление слияния (просто, но все еще непонятно) - PullRequest
0 голосов
/ 02 сентября 2011
MERGE INTO table_1 a   
USING      
 (SELECT * from table_2) b  ON ( a.row_id = b.row_id and a.in_correct IS NULL) 
WHEN MATCHED THEN UPDATE SET a.in_correct = 'Y'; 

В приведенном выше запросе ORA-38104: столбец, указанный в предложении ON, не может быть обновлен.

Я часами сидел, чтобы решить эту проблему.

Я определил, что проблема в поле in_correct.

Это поле "in_correct" нельзя ставить как в предложении ON, так и после SET. Но для того, чтобы удовлетворить мои критерии, у меня нет выбора.

Пожалуйста, помогите мне

1 Ответ

1 голос
/ 02 сентября 2011
MERGE INTO table_1 a USING
    (SELECT * from table_2) b 
ON ( a.row_id = b.row_id) 
WHEN MATCHED THEN UPDATE 
  SET a.in_correct = NVL(in_correct, 'Y');

ОБНОВЛЕНИЕ:

Более "общая" команда (для ненулевых значений):

MERGE INTO table_1 a USING
    (SELECT * from table_2) b 
ON ( a.row_id = b.row_id) 
WHEN MATCHED THEN UPDATE 
  SET a.in_correct = case 
                 when in_correct = 'valuetobereplaced' then 'Y'; 
                 else in_correct; 
                 end;
...