合并会更好然后更新原因很简单,在一个时间执行一个更新的一行引起许多不必要的上下文切换和索引/表的访问。甲骨文的运营状况更好。
为了能够在这里使用合并语句,您必须创建一个中间表,其中包括ID
,COMMENT
和USERID
。
之后,才可以执行合并
merge into RecordTable a using TEMP_recordtable b
on (a.id = b.id)
when matched then update set
a.COMMENT=b.COMMENT ,
a.MODIFIEDDate = SYSTIMESTAMP,
a.UserID = b.UserID
编辑:更新没有临时表
演示表
SQL> create table m1 (id number , name varchar2(30) , updated date);
Table created.
SQL> insert into m1 values (1 , 'Haki', sysdate);
1 row created.
SQL> insert into m1 values (3 , 'Simon', sysdate);
1 row created.
SQL> commit;
SQL> select * from m1;
ID NAME UPDATED
---------- ------------------------------ -------------------
1 Haki 03/10/2013 09:39:37
3 Simon 03/10/2013 09:38:17
如果你想使用SQL的集合,你需要在db中声明它们
SQL> create type rec as object (id number , name varchar2(10))
2/
Type created.
SQL> create type rec_arr as table of rec;
2/
Type created.
现在我们创建列表,并将其合并到我们的餐桌
SQL> ed
Wrote file afiedt.buf
1 declare
2 myarr rec_arr := rec_arr(rec (1 , 'Haki') , rec (2 , 'Raul'));
3 begin
4 merge into m1 using table(myarr) b on (m1.id = b.id)
5 when matched then update set
6 m1.name = b.name ,
7 m1.updated = sysdate
8 when not matched then insert (id , name , updated)
9 values (b.id , b.name , sysdate);
10* end;
SQL>/
PL/SQL procedure successfully completed.
SQL> select * from m1;
ID NAME UPDATED
---------- ------------------------------ -------------------
1 Haki 03/10/2013 09:40:16
3 Simon 03/10/2013 09:38:17
2 Raul 03/10/2013 09:40:16
3 rows selected.
正如你可以看到,现有的记录已被更新,新的记录被插入。
听起来,目前尚不清楚,您的问题是在许多不同的地方保存相同的信息? – Ben
@Ben它的工作一切正常...我只是问有没有更好的方式来更新表格的性能问题.. –