2011-06-21 82 views
0

我真的需要一些幫助,我的查詢。我試圖將兩個表合併在一起,但我只希望Cast_Date和Sched_Cast_Date的數據相同。我嘗試運行查詢,但在21行13列中找到錯誤缺失關鍵字。我確信這不是我唯一可能發生的錯誤。有人可以幫助我使這個查詢正常運行嗎?以下是我正在運行的查詢。合併和匹配oracle

merge into Dante5 d5 
using (SELECT 
bbp.subcar treadwell, bbp.BATCH_ID batch_id, 
bcs.SILICON silicon, 
bcs.SULPHUR sulphur, 
bcs.MANGANESE manganese, 
bcs.PHOSPHORUS phosphorus, 
bofcs.temperature temperature, 
to_char(bbp.START_POUR, 'dd-MON-yy hh24:MI') start_pour, 
to_char(bbp.END_POUR, 'dd-MON-yy hh24:MI') end_pour, 
to_char(bbp.sched_cast_date, 'dd-mon-yy hh24:mi') Sched_cast_date 
FROM bof_chem_sample bcs, bof_batch_pour bbp, bof_celox_sample bofcs 
WHERE bcs.SAMPLE_CODE= to_char('D1') 
and bofcs.sample_code=bcs.sample_code 
and bofcs.batch_id=bcs.batch_id 
and bcs.batch_id = bbp.batch_id 
and bofcs.temperature>0 
AND bbp.START_POUR>=to_DATE('01012011000000','ddMmyyyyHH24MISS') 
and bbp.sched_cast_date<=sysdate)d3 
ON (d3.sched_cast_date=d5.sched_cast_date) 
when matched then 
delete where (d5 sched_cast_date>=to_date('18012011','ddmmyyyy')) 
when not matched 
then 
update 
set d5=batch_id='99999' 
+1

將兩個表合併在一起對您意味着什麼?通常情況下,如果有匹配項,則更新目標表,並在沒有匹配時插入到目標表中。在這裏,你永遠不會插入到目標表中。而且您永遠不會更新目標表,因爲根據定義,如果沒有匹配,則目標表中沒有要更新的行。你使用的是什麼版本的Oracle? Oracle將可選的DELETE子句添加到10g(並且使WHEN MATCHED和WHEN NOT MATCHED子句都是可選的),但在匹配上刪除似乎很奇怪。 –

+1

@Justin你爲什麼選擇評論而不是回答? –

+0

@Conrad - 在嘗試解決語法問題之前,我試圖理解需求。我試圖指出當前的語法是如何混淆需求的。 –

回答

1

您的語法無效,以開頭。如果指定WHEN MATCHED,則需要指定WHEN MATCHED THEN UPDATE SET col = value。對於不匹配的時候,你必須指定WHEN NOT MATCHED THEN INSERT。 See the documentation瞭解更多信息。