2008-08-14 7 views

Répondre

2

@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.

5

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.

+1

On dirait que votre problème est que vous utilisez SQLServer. – Crashworks

8

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.

2

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

  • Si elle est un environnement de site de production avec beaucoup d'utilisateurs, assurez-vous que le curseur disparaît avant que quelqu'un obtient un délai d'attente..
  • Si vous écrivez, par exemple, un "journal analysant une procédure stockée" (ou autre) sur une machine propriétaire qui ne fait rien d'autre: n'hésitez pas à faire ce que vous voulez faire. Vous serez la seule personne à attendre. Ce n'est pas comme si le serveur de base de données allait mourir parce que vous utilisez des curseurs. Vous devriez cependant considérer que le comportement d'utilisation changera au fil du temps et qu'il y aura peut-être 10 personnes utilisant cette application. Alors essayez de trouver un autre chemin;)
2

@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.