The sql for an UPDATE or DELETE statement constructed by Shareplex's Post process prior to applying it on the target database has in its "where" clause a condition "rownum =1". One place where such sql are logged is the file *errlog.sql. The following entry makes this point clear:
update "OWNER"."TABLENAME" t set "MODIFIED_DATE"=
'03142010193653.334283000',"FIELD1"='15' where rownum =
1 and "MODIFIED_DATE"='03142010220842.300283000' and "FIELD1"=
This solution provides explanation as to what is the significance of the condition "rownum =1".
The condition "rownum =1" simply means that the "where" clause will be evaluated and if there are multiple rows satisfying this condition, then only the first qualifying row that is returned by the query will be UPDATEd or DELETEd. If the UPDATE or DELETE on source only returns one row, then the condition "rownum =1" will be irrelevant. However, if there are more than one qualifying rows updated or deleted on source, then Shareplex will construct as many SQL to be applied on target database, each of such SQL having the condition "rownum =1", whereby every SQL will be applied to the first qualifying row on target.
The following table with a simple example will make it clearer (shown for UPDATE DML that succeeds on two rows on source):
# of rows updated on source # of qualifying target rows Action on target
2 1 1st update will succeed, 2nd will fail.
2 2 both updates will succeed.
2 3 2 updates will succeed, 3rd row unchanged.