Oracle Upsert : mettre à jour ou insérer efficacement des données
Problème :
Comment pouvez-vous effectuer une opération d'insertion dans Oracle : mettre à jour un enregistrement s'il existe ou en insérer un nouveau s'il n'existe pas ?
Solution : La MERGE
Déclaration
Oracle n'a pas de commande UPSERT dédiée. L'instruction MERGE
fournit cette fonctionnalité. Il combine efficacement les opérations de mise à jour et d'insertion en fonction d'une condition de jointure.
Exemple illustratif
Cet exemple présente un upsert utilisant l'instruction MERGE
dans une procédure stockée :
<code class="language-sql">CREATE OR REPLACE PROCEDURE upsert_data (p_id NUMBER, p_value NUMBER) AS BEGIN MERGE INTO my_table target USING dual source ON (target.id = p_id) WHEN MATCHED THEN UPDATE SET target.value = p_value WHEN NOT MATCHED THEN INSERT (id, value) VALUES (p_id, p_value); END; / -- Sample usage and verification CREATE TABLE my_table (id NUMBER PRIMARY KEY, value NUMBER); BEGIN upsert_data(1, 10); upsert_data(1, 20); -- Update existing row upsert_data(2, 30); -- Insert new row END; / SELECT * FROM my_table;</code>
Cette procédure, upsert_data
, prend un identifiant et une valeur. L'instruction MERGE
compare le p_id
fourni avec les identifiants existants dans my_table
.
WHEN MATCHED
: Si une correspondance est trouvée, la colonne value
est mise à jour en p_value
.WHEN NOT MATCHED
: Si aucune correspondance n'est trouvée, une nouvelle ligne est insérée avec les p_id
et p_value
donnés.L'instruction SELECT
finale démontre les résultats combinés de mise à jour et d'insertion. Cette approche est efficace et évite le besoin d'instructions UPDATE
et INSERT
séparées avec des vérifications conditionnelles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!