あなたの構文がゆがんであります。
merge into bonuses b
using(select * from bonuses) s
ON (s.employee_id = 115)
WHEN MATCHED THEN update set bonus='555'
WHEN NOT MATCHED THEN insert(employee_id) values(115)
/
しかし、それはusing
句でターゲット表を持ってしても意味がありません:それは、このする必要があります。それはあなたがそれが起こっていると思う結果を生成しません...
SQL> select * from bonuses;
EMPLOYEE_ID BONUS
----------- ----------
111
112
113
114
115
5 rows selected.
SQL> merge into bonuses b
2 using(select * from bonuses) s
3 ON (s.employee_id = 115)
4 WHEN MATCHED THEN update set bonus='555'
5 WHEN NOT MATCHED THEN insert (employee_id) values(115)
6/
9 rows merged.
SQL> select * from bonuses;
EMPLOYEE_ID BONUS
----------- ----------
111 555
112 555
113 555
114 555
115 555
115
115
115
115
9 rows selected.
SQL>
多分これはあなたに合っていますか?
merge into bonuses b
using(select * from employees) e
ON (b.employee_id = e.employee_id)
WHEN MATCHED THEN
update set bonus= 555
WHEN NOT MATCHED THEN
insert (employee_id) values (e.id)
あなたはそれが偽物にDUAL表を使用することができますボーナステーブルは異なる従業員IDのソースを持っていない場合:
SQL> merge into bonuses b
2 using(select 115 as employee_id, 555 as bonus from dual union all
3 select 116 as employee_id, 555 as bonus from dual) e
4 ON (b.employee_id = e.employee_id)
5 WHEN MATCHED THEN
6 update set bonus= e.bonus
7 WHEN NOT MATCHED THEN
8 insert (employee_id) values (e.employee_id)
9/
2 rows merged.
SQL> select * from bonuses;
EMPLOYEE_ID BONUS
----------- ----------
111
112
113
114
115 555
116
6 rows selected.
SQL>
出典
2017-06-28 12:19:15
APC
ここでビジネスロジックとは何ですか?それは意味をなさない。 – APC
従業員111のBONUSレコードが存在しない場合、従業員115のボーナスレコードが追加されますか?奇妙な。もしそれが正しければ、あなたは会社内で面白いボーナス制度を持っています。 – BriteSponge
これは単なるサンプルです。このマージクエリーがうまくいくなら私は他の仕事のために実装するつもりです。 Plsは技術的にここでビジネスロジックを探しません。 – Mano