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
390 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!

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