【发布时间】:2015-10-26 17:06:55
【问题描述】:
我试图在 PLSQL 块中以以下方式运行合并语句,并得到如下所述的 ORA-00904 错误:
--合并语句
l_mergestr1:='merge into pi_customer picu using (select * from table(picu_var)) src ' ||
' on (picu.customer_id = src.customer_id) when matched then update set '||l_newmergeupstr1||
' where picu.time_stamp <> pctemp.time_stamp when not matched then' ||
' insert ('||l_newmergeinsstr1||') values ('||l_newmergeinstvalstr1||')';
execute immediate l_mergestr1;
ORA-00904:“PICU_VAR”:标识符无效
这里 picu_var 是我已经声明的 object_type 变量。 使用 dbms_output 我验证了合并语句转换为以下我认为是合并的正确语法并且它有效:
merge into pi_customer picu using (select * from table(picu_var)) src
on (picu.customer_id = src.customer_id) when matched then update set picu.Customer_Name=src.Customer_Name,picu.Server_Name=src.Server_Name,picu.Time_stamp=src.Time_stamp
where picu.time_stamp <> src.time_stamp when not matched then
insert (picu.Customer_ID,picu.Customer_Name,picu.Server_Name,picu.Time_stamp) values (src.Customer_ID,src.Customer_Name,src.Server_Name,src.Time_stamp)
我还验证了源表和目标表列名之间没有不匹配,并且合并语法在执行时作为从 dbms_output 返回的内容起作用。
请建议如何避免错误 ORA-00904。
“l_mergestr1”中声明的合并语法是否需要更改?
【问题讨论】:
标签: oracle11g