Dans vos applications, qu'est-ce qu'un "long temps" pour garder une transaction ouverte avant de valider ou de reculer? Minutes? Secondes? Heures?Quelle est la durée "raisonnable" pour garder un curseur SQL ouvert?
et sur quelle base de données?
Dans vos applications, qu'est-ce qu'un "long temps" pour garder une transaction ouverte avant de valider ou de reculer? Minutes? Secondes? Heures?Quelle est la durée "raisonnable" pour garder un curseur SQL ouvert?
et sur quelle base de données?
@lomaxx, @ChanChan: autant que je sache, les curseurs ne sont qu'un problème sur SQL Server et Sybase (variantes T-SQL). Si votre base de données est Oracle, les curseurs sont vos amis. J'ai vu un certain nombre de cas où l'utilisation de curseurs a effectivement amélioré les performances. Les curseurs sont un mécanisme incroyablement utile et tbh, dire des choses comme "si vous utilisez un curseur nous vous virons" est un peu ridicule. Cela dit, vous voulez seulement garder un curseur ouvert pour le minimum absolu qui est requis. Spécifier un temps maximum serait arbitraire et inutile sans comprendre le domaine du problème.
transactions: minutes.
Curseurs: 0seconds maximum, si vous utilisez un curseur, nous vous virons. Ce n'est pas ridicule si l'on considère que nous sommes dans un environnement Web à haute disponibilité, qui doit exécuter sql server, et nous n'autorisons même pas les process stockés en raison de leur incapacité à les mettre à jour et à les maintenir correctement. Si nous utilisions oracle peut-être.
Je vais probablement être flambé pour cela, mais vous devriez vraiment essayer d'éviter d'utiliser des curseurs car ils entraînent de sérieux problèmes de performance. Si vous devez l'utiliser, vous devez lui laisser le minimum de temps possible afin de libérer les ressources bloquées par le curseur dès que possible.
Généralement, je suis d'accord avec les autres réponses: Évitez les curseurs si possible (dans la plupart des cas) et fermez-les aussi vite que possible.
Cependant: Tout dépend de l'environnement que vous travaillez dans
@ninesided: problèmes de performances mis à part, il s'agit également d'utiliser le bon outil pour le travail. Étant donné le choix de déplacer le curseur hors de votre requête dans le code, je pense que 99 fois sur 100, il serait préférable de mettre cette logique de bouclage dans une sorte de code managé. Cela vous permet d'obtenir les avantages d'utiliser un débogueur, compiler les erreurs de temps, taper saftey, etc.
Ma réponse à la question est toujours la même, si vous utilisez un curseur, fermez-le dès que possible, dans Oracle J'essaierais aussi d'utiliser des curseurs explicites.
On dirait que votre problème est que vous utilisez SQLServer. – Crashworks