--------------------------------------------------------------------------------------------------------
CREATE TABLE SORCETABLE ( FNAME VARCHAR2(20 BYTE), LNAME VARCHAR2(20 BYTE), CITY VARCHAR2(20 BYTE) );
CREATE TABLE TARGETTABLE ( ID NUMBER, FNAME VARCHAR2(20 BYTE), LNAME VARCHAR2(20 BYTE), CITY VARCHAR2(20 BYTE) );
INSERT INTO SORCETABLE (FNAME,LNAME,CITY) VALUES (NULL,'Rajesh','abc','R_city');
INSERT INTO SORCETABLE (FNAME,LNAME,CITY) VALUES (NULL,'Vivek',NULL,'V_city');
INSERT INTO SORCETABLE (FNAME,LNAME,CITY) VALUES (NULL,'Sanjay',NULL,'S_city');
INSERT INTO SORCETABLE (FNAME,LNAME,CITY) VALUES (NULL,'Ishan','xyz','I_city');
Insert into SORCETABLE (FNAME,LNAME,CITY) values (null,'Bhavesh',null,'B_city');
MERGE INTO TARGETTABLE TRG
USING SORCETABLE SRC
ON
(
TRG.FNAME = SRC.FNAME AND
TRIM(TRG.LNAME) = TRIM(SRC.LNAME )
)
WHEN MATCHED THEN
UPDATE SET
TRG.CITY = SRC.CITY
WHEN NOT MATCHED
THEN
INSERT (TRG.ID , TRG.FNAME , TRG.LNAME , TRG.CITY )
VALUES (SEQ_TEST.NEXTVAL ,SRC.FNAME ,SRC.LNAME , SRC.CITY );
COMMIT;
-------------------------------------------------------------------------------------------------------------
IF the Above code EXECUTE THEN THE ROWS HAVING NULL "LNAME" ARE INSERTED MULTIPLE TIMES
IF USED NVL(TRIM(TRG.LNAME),'*') = NVL( TRIM(SRC.LNAME,'*') THEN WORK FINE
BUT IT IS NOT STD SOLUTIONS?.
Plz give the Alternate to Used TRIM() in merge Statement
Thanks