2014-09-26 3 views
0

Может кто-нибудь объяснить мне, что я делаю неправильно с этим утверждением. Его довольно простой ....Моя слияния неверна в Oracle 11G

merge into week1wrs 
using 
(select wr_id,fname,lname from wrname_id) on 
(week1wrs.fname=wrname_id.fname and week1wrs.lname=wrname_id.LNAME) 
when matched then update set week1wrs.WR_ID=wrname_id.wr_id 
when not matched update set week1wrs.Name_id=''; 

* Я использую Oracle 11g

+0

Что это проблема, которую вы испытываете? –

+0

Вы выполняете обновление в 'merge_insert_clause', вы не можете сделать это' когда не сопоставлено обновление'. Посмотрите здесь для получения информации http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm – Aramillo

ответ

2

псевдонимов использования таблиц в качестве мишени (Т) и источника (S)

merge into week1wrs T 
using 
(select wr_id,fname,lname from wrname_id) S on 
(S.fname=T.fname and S.lname=T.LNAME) 
when matched then update set T.WR_ID=S.wr_id 
when not matched --need to be insert here. 
1
when not matched update set week1wrs.Name_id='' 

Если не указано, вы можете только INSERT, вы не можете обновить.

Merge Синтаксис:

MERGE INTO table 
USING table | subquery 
ON condition 
WHEN MATCHED THEN UPDATE SET col = expression | DEFAULT 
where_clause 
DELETE where_clause 
WHEN NOT MATCHED THEN INSERT (col, col2) 
VALUES (expr1, expr2 | DEFAULT) 
where_clause 
WHERE condition; 
+0

Да, это то, что я сказал выше – Aramillo

+0

Спасибо всем. Я попробую – Luke