Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Merge statement - WHEN NOT MATCHED THEN UPDATE

user5605610Oct 21 2010 — edited Oct 21 2010
Hi,

I am trying to use a Merge Statement. The requirement is when there is match I need to change the names in table-1 to lower case names of table-2. Else, I need to translate the existing names in table-1.

I wrote the below query to do that. But I am getting an error as mentioned below.

I guess it is expecting INSERT statement after WHEN NOT MATCHED.

Can someone please help me out?


MERGE INTO employee_temp e USING employee_names s ON (e.employee_nbr = s.employee_nbr)
WHEN MATCHED THEN
UPDATE
SET e.last_nme = lower(s.last_nme) ,
e.first_nme = lower(s.first_nme) ,
e.middle_initial_txt = lower(s.middle_initial_txt),
e.full_nme = lower(trim(s.last_nme
||' '
|| s.first_nme
||' '
|| s.middle_initial_txt))
WHEN NOT MATCHED THEN
UPDATE
SET e.last_nme = TRANSLATE(e.last_nme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'QUHLZAYTMVRPOWXDKIBFSJGCEN') ,
e.first_nme = TRANSLATE(e.first_nme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'QUHLZAYTMVRPOWXDKIBFSJGCEN') ,
e.middle_initial_txt = TRANSLATE(e.middle_initial_txt, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'QUHLZAYTMVRPOWXDKIBFSJGCEN'),
e.full_nme = TRANSLATE((trim(e.last_nme
||' '
|| e.first_nme
||' '
|| e.middle_initial_txt)), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'QUHLZAYTMVRPOWXDKIBFSJGCEN')

Error at Command Line:13 Column:3
Error report:
SQL Error: ORA-00905: missing keyword
00905. 00000 - "missing keyword"
*Cause:
*Action:
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 18 2010
Added on Oct 21 2010
3 comments
17,912 views