Votre syntaxe est mal tourné. Il devrait être ceci:
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)
/
Cependant, il n'a pas de sens d'avoir la table cible dans la clause using
. Il ne produit pas les résultats que vous pensez que ça va ...
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>
Peut-être quelque chose comme ça vous convient?
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)
Si vous ne disposez pas d'une source d'employé ID distinct de la table PRIMES vous pouvez utiliser la table DUAL pour truquer:
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>
Quelle est la logique d'affaires ici? Cela n'a pas de sens. – APC
Donc, si un enregistrement BONUS n'existe pas pour l'employé 111, vous allez ajouter un enregistrement de bonus pour l'employé 115? Bizarre. Si c'est correct alors vous avez un régime de bonus intéressant dans l'entreprise .. – BriteSponge
c'est juste un échantillon, si cette requête de fusion fonctionne, je vais mettre en œuvre pour d'autres travaux. Pls m'aider techniquement ne pas chercher la logique d'affaires ici .. – Mano