合并功能错误 - On Clause无法更新 - PK问题

时间:2015-01-22 01:33:32

标签: oracle

过程是检查eid,并进行合并。在更新现有行时,需要使用eid.seq.nextval进行更新。 我创建了一个序列并在Procedure中调用。

CREATE OR REPLACE PROCEDURE Temp(
Eid Number,
dpt varchar2
) As
BEGIN

    MERGE INTO Src1 e
        USING (select v_eid as eid
            , v_dept as dept
              FROM dual) d
         ON (e.eid = d.eid)
    WHEN NOT MATCHED THEN
         INSERT (e.eid,e.dept)
                VALUES(d.eid, d.dept)
    WHEN MATCHED THEN
         UPDATE SET e.eid = eid_SEQ.nextval, e.dept = d.dept;

   END;
/

错误:

1.ORA--38104:ORA-38104: Columns referenced in the ON Clause cannot be updated.

如果我删除了ON子句条件,则PK不能为空错误。

此外,在过程中调用seq.nextval的最佳过程。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

合并声明无法实现您的目标。想一想:您正在尝试更新用于确定是否应更新字段的字段的值。这是不安全的,特别是如果merge语句更新/插入多行。

除此之外,几乎不可能提出替代方案,因为eid似乎是主键,更新主键通常是件坏事。