2011-06-21 15 views
0

私は本当に私のクエリにいくつかの助けが必要です。私は2つのテーブルを一緒にマージしようとしていますが、私はデータが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

2つのテーブルを結合するのはどういう意味ですか?通常、一致するものがある場合は宛先テーブルを更新し、一致しない場合は宛先テーブルに挿入します。ここでは、決して宛先テーブルに挿入しません。定義によると、一致するものがなければ、更新する宛先表に行がないため、宛先表を更新することはありません。使用している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の場合は、WHEN NOT MATCHED THEN INSERTを指定する必要があります。詳細についてはSee the documentationをご覧ください。

関連する問題