我花了大部分时间试图确定为什么合并声明不起作用,我开始认为问题必须是有点异国情调。
我的数据库有许多使用合并语句的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。
答案 0 :(得分:4)
您的using子句似乎缺少您尝试加入的列。
您的代码:
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)
潜在的解决方法:
merge into customer_contact c
using (select p.sfdc_cust_contact_pk,
p.fax_number,
p.email
from sfdc_cust_contact_temp p
) p
on (p.sfdc_cust_contact_pk = c.sfdc_cust_contact_pk)