【问题标题】:ORA-00904: invalid identifier during merge PLSQLORA-00904: 合并 PLSQL 期间标识符无效
【发布时间】: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


    【解决方案1】:

    您不能在动态 SQL 内部引用来自动态 SQL 外部的变量。使用绑定变量传入:

    l_mergestr1:='merge into pi_customer picu using (select * from table(:picu_bv)) 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 using picu_var;
    

    【讨论】:

    • 我从未在 plsql 中使用过绑定变量。您能否就此提供更多线索?在这种情况下,当我使用上述语法并运行合并时,它会给我一个错误“ORA-01008: not all variables bound”
    • 抱歉我的错误评论,它按照上面的语法工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2021-08-08
    • 2022-01-22
    • 2011-08-27
    • 2011-04-21
    • 2019-06-29
    • 2013-10-20
    相关资源
    最近更新 更多