Я провел большую часть дня, пытаясь определить, почему оператор слияния не работает, и я начинаю думать, что проблема должна быть чем-то немного экзотическим.
В моей базе данных есть десятки процедур PL / SQL, которые используют операторы слияния, но я абсолютно не могу заставить их работать. Хотя он намного больше показанного в примере, я сократил его, чтобы он обновлял только пару столбцов и все равно не скомпилировал.
Ошибка: 'ORA-00904 "псевдоним". "Column_name" неверный идентификатор ". Как правило, это означает, что имя столбца было введено с ошибкой или, в случае слияния, вы пытаетесь обновить поле, которое используется в объединении. Это определенно НЕ тот случай. Я четыре раза проверил, и имена столбцов верны, все они существуют, и формат выражения точно такой же, как и во многих других местах.
/**
Result: ORA-00904 "P"."SFDC_CUST_CONTACT_PK": invalid identifier
I'm certain that the table and column names are all correct.
If I join on any of the dozen or so other columns instead, I
get the exact same error.
Note: I'm NOT attempting to update the column that I join
against.
**/
merge into customer_contact c
using (select p.fax_number,
p.email
from sfdc_cust_contact_temp p
) p
on (p.sfdc_cust_contact_pk = c.sfdc_cust_contact_pk)
when matched then
update set
c.fax_number = p.fax_number,
c.email = p.email;
/***
This works fine on the same machine
**/
merge into customer_contact_legacy c
using (select ct.contact_legacy_pk,
ct.fax_number,
ct.email
from customer_contact_temp ct
) ct
on (upper(trim(ct.contact_legacy_pk)) = upper(trim(c.contact_legacy_pk)))
when matched then
update set
c.fax_number = ct.fax_number,
c.email = ct.email;
Есть идеи, что еще здесь может быть не так? Может ли быть какой-либо тип повреждения с таблицей?
Версия 10g.