我在oracle中有一个表,从第三方插入数据。我想从该表填充主表。那么,使用集合的性能最佳方式是什么。
E.g。假设,从第三方填充数据的表是'EMP_TMP'。
现在我想通过程序填充'EMPLOYEE'主表,该程序将从EMP_TMP表填充。
这里又有一个条件,如IF SAME EMPID(这不是主键)EXISTS然后我们必须UPDATE FULL TABLE,它包含SAME EMPID ELSE,我们有INSERT NEW RECORD。
[注意:这里EMPID是VARCHAR2,EMPNO将是我们将使用SEQUENCE的主键]
我认为合并在性能方面不会表现得更好,因为我们无法在MERGE语句中使用集合。
答案 0 :(得分:0)
好吧,如果性能是您的主要考虑因素,并且您不喜欢MERGE,那么如何(以脚本,单个事务运行):
delete from EMPLOYEE where emp_id IN (
select emp_id from EMP_TMP);
insert into EMPLOYEE
select * from EMP_TMP;
commit;
显然不是“最安全”的方法(并且书面假定完全相同的表定义并且你有回滚),但应该很快(你也可能混乱使用IN vs EXISTS等)。如果emp_id或emp_no是这两个表中的常用密钥,我就无法理解你的帖子,但是在你的情况下使用任何有意义的东西。
答案 1 :(得分:0)
创建一个过程,您需要使用PL / SQL。 首先进行更新,然后测试sql%rowcount。 如果为0,则不进行更新,而是必须进行插入。
我认为这是相当有效的。
伪代码
Update table;
if sql%rowcount = 0 then
//get new sequence number
insert into table;
END IF;
COMMIT;
HTH