Maison > base de données > tutoriel mysql > Pourquoi ma requête Oracle UPDATE avec une jointure provoque-t-elle une boucle infinie ?

Pourquoi ma requête Oracle UPDATE avec une jointure provoque-t-elle une boucle infinie ?

Linda Hamilton
Libérer: 2024-12-24 00:04:15
original
370 Les gens l'ont consulté

Why Does My Oracle UPDATE Query with a Join Cause an Infinite Loop?

Mise à jour avec la requête de jointure dans Oracle : dépannage d'une boucle infinie

La requête Oracle UPDATE fournie s'exécute indéfiniment, ce qui soulève la question de savoir ce qui pourrait être provoquant ce problème. La requête tente de mettre à jour les colonnes de la table 1 à l'aide d'une sous-requête corrélée qui joint deux autres tables.

La cause première de la boucle infinie est probablement due à l'absence d'une condition dans la sous-requête qui garantirait qu'elle renvoie un seul ligne pour chaque ligne du tableau 1. Sans une telle condition, la sous-requête peut renvoyer plusieurs lignes, ce qui entraînerait une violation de l'exigence de l'instruction UPDATE pour une opération de mise à jour sur une seule ligne.

Pour résoudre ce problème, il est nécessaire d'ajouter une condition à la sous-requête qui relie les lignes de la table1 aux lignes de la sous-requête. Cela implique généralement de faire correspondre les clés primaires ou uniques entre les tables à l'aide d'une clause AND. Par exemple :

UPDATE table1 t1 SET (t1.col,t1.Output) = (
  SELECT t2.col, t3.Output + t2.col
  FROM tabl2 t3 
  LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
  WHERE t2.col is not NULL
    AND t1.some_key = t2.some_key);
Copier après la connexion

Dans cet exemple, la condition AND t1.some_key = t2.some_key garantit que la sous-requête renverra au plus une ligne pour chaque ligne de la table1, empêchant ainsi une boucle infinie.

Une autre considération importante est de savoir si l'instruction UPDATE est destinée à mettre à jour toutes les lignes du tableau 1 ou seulement un sous-ensemble d'entre elles. La requête d'origine ne contient aucune clause WHERE, ce qui indique qu'elle mettrait à jour toutes les lignes, ce qui n'est peut-être pas le comportement souhaité. Si seul un sous-ensemble spécifique de lignes doit être mis à jour, une clause WHERE doit être ajoutée pour filtrer les lignes qui répondent aux critères de mise à jour.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal