|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Membre Expert
![]() eric MaitreÉtudiant Inscription : février 2010 Messages : 953 ![]() |
Bonjour,
j'ai une erreur sur un de mes scripts et je ne comprend pas pourquoi... *ce script fonctionne trés bien sur une autre machine, avec une base qui à la même structure mais pas le même contenu* Code :
est donc en croix avec le message suivant Citation:
Citation:
Citation:
il me dit juste qu'il compte 9 fois mais je comprend pas ce qui le dérange avec le Previous count = 0, current count = 9 |
|||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
A quoi servent vos commit et rollback dans votre cas?
Vous initialisez une transaction dans chacun de vos passage dans le curseur... que vous rollbackez si votre delete déclenche une erreur... or c'est la seule instruction de votre transaction?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#3 | |
|
Membre Expert
![]() |
Dans le cas ou
Citation:
vous êtes surement dans le cas ou dans chaque boulce @li_nbre_of=0
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Il faut éviter les imbrications de transaction.. ou bien savoir les gérer. En effet les transactions imbriquées, cela n'existe pas. Il n'y a jamais qu'une seule transaction du fait de la notion d'atomicité des transactions.
Ce qui fait que si vous envoyez 35 BEGIN TRANSCATION, le premier ROLLBACK annule la transaction. En revanche quand vous envoyez un COMMIT cela décrémente le compteur de transaction de 1 et s'il passe à zéro, la transaction est réellement validée. Pour tester ou vous en êtes dans votre empilement, vous pouvez utiliser la variable globale de session @@TRANCOUNT. Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/s...ns-imbriquees/ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#5 |
|
Membre Expert
![]() |
De plus votre curseur est complètement inutile, la suppression peux à coups sûr se faire en une seule requête...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() eric MaitreÉtudiant Inscription : février 2010 Messages : 953 ![]() |
A vrai dire, je n'ai pas d'énorme connaissance en Script
c'est une usine à gaz que j'ai détérée derriére un probléme... l'objectif est de purgé les bases, en ne gardant que 2ans d'archives. *on joue sur les dates* je ne comrpend pas ce que sont les commit transaction et rollback transaction , ni à qou ils servent Par contre je vien de me rentre compte que mes tables ne sont pas identiques celle ou je plante, a en faite une colonne de plus... mais je ne voi pas en quoi ça pose un probléme |
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() |
Remplacez votre code par cela:
Code :
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
10
|
|
|
#8 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() eric MaitreÉtudiant Inscription : février 2010 Messages : 953 ![]() |
OK,
j'essaye le code que vous m'avez donné. je vous tien au courant *rapidement* |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() |
Une petite erreur s'est introduite dans mon script :-) je l'ai modifié
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#11 | |||
|
Membre Expert
![]() eric MaitreÉtudiant Inscription : février 2010 Messages : 953 ![]() |
dans ce code
Code :
il me génére une erreur lorsque je check la syntax Citation:
|
|||
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() |
Code :
Retirez simplement les deux "R." de la clause where
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
10
|
|
|
#13 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() eric MaitreÉtudiant Inscription : février 2010 Messages : 953 ![]() |
ok c'est bon le scritp est correct sytaxiquement et le job tourne
mais quelles sont les différences par rapport a mon code d'origine?... je voudrai justifier ce travaille, bien que je comprenne les requétes SQL faite. |
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() |
Ok...
L'ancien code commençait par lister les lignes à supprimer. Puis via un CURSOR (à éviter autant que faire se peut...) pour chacune de ces lignes il vérifiait que la ligne n'était pas "utilisée" par une autre table (ord_fab) Si ce n'était pas le cas la ligne était supprimée... Du coups si tu as 1000 ligne à supprimer... ton ancien code faisait 2000 requetes... SQL permet de faire tout celà en une seule fois car c'est un langage ensembliste... Mon nouveau code peux se traduire comme celà: "Supprime toutes les lignes vieille de plus de N jours et dont il n'existe pas de lien avec la table ord_fab"...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
10
|
|
|
#16 |
|
Membre Expert
![]() eric MaitreÉtudiant Inscription : février 2010 Messages : 953 ![]() |
juste une chose que je n'ai pas compris dans le script
quand tu fait Code :
SELECT * FROM ord_fab O WHERE O.id_rec=rec.ID_REC AND O.vers_rec=rec.VERS_REC le "FROM ord_fab O" donne tout la structure à O de la table ord_fab? |
|
|
00
|
|
|
#17 |
|
Membre Expert
![]() |
Le O est juste un alias cela t'evite juste de devoir retaper le nom de ta table en entier à chaque fois...
Sinon j'aurais du taper çà: Code :
SELECT * FROM ord_fab WHERE ord_fab.id_rec=rec.ID_REC AND ord_fab.vers_rec=rec.VERS_REC
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
10
|
|
|
#18 |
|
Membre Expert
![]() eric MaitreÉtudiant Inscription : février 2010 Messages : 953 ![]() |
Merci beaucoup "iberserk"
*vraiment merci, ça fonctionne nikel*
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com