Ihre Syntax ist schief. Es sollte sein:
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)
/
Es ist jedoch nicht sinnvoll ist, in der using
Klausel, um die Zieltabelle zu haben. Es produziert nicht die Ergebnisse, die Sie denken, es geht ...
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>
Vielleicht wie etwas das würde Ihnen passen?
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)
Wenn Sie keine Quelle der Mitarbeiter-IDs verschieden von der BONI Tabelle haben Sie die DUAL-Tabelle zu fälschen sie verwenden können:
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>
Was ist das Geschäft hier Logik? Es macht keinen Sinn. – APC
Wenn also für Mitarbeiter 111 kein BONUS-Datensatz existiert, fügen Sie einen Bonus-Datensatz für Mitarbeiter 115 hinzu. Seltsam. Wenn das stimmt, hast du ein interessantes Bonusregime in der Firma. – BriteSponge
dies ist nur ein Beispiel, wenn diese Zusammenführungsabfrage funktioniert, werde ich für andere Arbeiten implementieren. Bitte helfen Sie mir technisch suchen Sie hier nicht nach Geschäftslogik. – Mano