What does the REPLACE mode of Oracle SQL Loader do?

Links: http://www.dbatools.net/experience/sqlldr-replace-mode.html

    There is something wrong in my mind about the "REPLACE" mode of Oracle SQL Loader, I have thought that sqlldr will use a merge logic, to replace matched rows if the target table has a primary key. But it's not working this way. When I unload few rows (where dept=10) from "SCOTT.EMP" table with "MODE=REPLACE", and then load it to "TEST.EMP" with existing rows. I found the old rows are deleted.

--
-- Generated by OCIULDR
--
OPTIONS(BINDSIZE=8388608,READSIZE=8388608,ERRORS=-1,ROWS=50000)
LOAD DATA
INFILE 'uldrdata.txt' "STR X'0a'"
replace INTO TABLE emp
FIELDS TERMINATED BY X'2c' TRAILING NULLCOLS
(.....)

    Actually with this mode, sqlldr do a delete on target first. I found the following SQL in V$SQL.

DELETE /*+NESTED_TABLE_SET_REFS+*/ FROM EMP

    Then Oracle found that deleting is not high effective, so introduced the "TRUNCATE" mode into sqlldr.

Comments (1)

how can we use when clause in replace mode in sqlloader?

« Previous | Main | Next »

Powered by
Movable Type 5.01