过程是检查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的最佳过程。
非常感谢任何帮助!
答案 0 :(得分:0)
合并声明无法实现您的目标。想一想:您正在尝试更新用于确定是否应更新字段的字段的值。这是不安全的,特别是如果merge语句更新/插入多行。
除此之外,几乎不可能提出替代方案,因为eid
似乎是主键,更新主键通常是件坏事。