[MS SQL] Problème avec Procédures stockées & Curseur

Problème avec Procédures stockées & Curseur [MS SQL] - SQL/NoSQL - Programmation

Marsh Posté le 22-06-2005 à 10:56:28    

:hello:  
 
Voilà j'arrive pas a utiliser un curseur directement dans une procédure stockée... (en fait je sais meme pas si c'est possible)
 
Voilà mon code :
 

Code :
  1. CREATE PROCEDURE dbo.P_InterdictionTitulaire
  2. @idTitulaire int,
  3. @I_idTypeOpposition int,
  4. @I_commentaireOpposition varchar(200)
  5. AS
  6. -- Création du curseur qui nous permettra de passer toutes les cartes du titulaire en revue
  7. DECLARE C_CartesTitulaire CURSOR
  8. FOR SELECT noInterne FROM CARTE WHERE idTitulaire = @idTitulaire
  9. DECLARE @noInterneCarte int
  10. -- Si le champ interdicition est à 0, on procède à l'interdiction,
  11. -- sinon le titulaire est déjà en interdiction!
  12. IF ((SELECT interdiction FROM TITULAIRE WHERE idTitulaire = @idTitulaire) = 0)
  13. BEGIN
  14.  -- On ouvre le curseur
  15.  OPEN C_CartesTitulaire
  16.  -- Tant qu'il y a des résultats, on lance l'opposition sur les cartes
  17.  WHILE @@FETCH_STATUS = 0
  18.   BEGIN
  19.    FETCH NEXT FROM C_CartesTitulaire INTO @noInterneCarte
  20.    -- On fait appel à la PS d'opposition d'une carte
  21.    EXEC dbo.P_OppositionCarte
  22.     @noInterne = @noInterneCarte,
  23.     @idTypeOpposition = @I_idTypeOpposition,
  24.     @commentaireOpposition = @I_commentaireOpposition
  25.   END
  26.  -- Fermeture du curseur et désallocation
  27.  CLOSE C_CartesTitulaire
  28.  DEALLOCATE C_CartesTitulaire
  29.  -- Mise à jour du titulaire (interdit = TRUE (1), date début d'interdiction et date fin!)
  30.  UPDATE TITULAIRE
  31.   SET interdiction = 1,
  32.       dateDebutInterdiction = GETDATE(),
  33.       dateFinInterdiction = NULL
  34.   -- date de fin à NULL, car on ne sait pas encore quand l'interdiction prendra fin!
  35.   WHERE idTitulaire = @idTitulaire
  36. END
  37. ELSE
  38. BEGIN
  39.  RAISERROR ('Le titulaire est déjà en interdiction!', 16, 1)
  40.  RETURN
  41. END
  42. go


 
Ce que je veux faire, c'est que pour chaque carte du titulaire, lancer la procédure dbo.P_OppositionCarte. Mais à chaque fois il me dit soit "Cursor already exist" ou "Cursor does not exist"...
 
Création du curseur: ligne 8
Ouverture du curseur: ligne 17
 
Help plizzz
 
++


Message édité par le_duc le 22-06-2005 à 19:02:26
Reply

Marsh Posté le 22-06-2005 à 10:56:28   

Reply

Marsh Posté le 22-06-2005 à 11:58:11    

ptit up...

Reply

Marsh Posté le 22-06-2005 à 13:59:39    

un reup. personne?

Reply

Marsh Posté le 22-06-2005 à 16:41:51    

Tu nous parles de la proc P_OppositionCarte mais le code correspond à P_InterdictionTitulaire...
 
Est-ce normal?

Reply

Marsh Posté le 22-06-2005 à 17:21:09    

pouyotte a écrit :

Tu nous parles de la proc P_OppositionCarte mais le code correspond à P_InterdictionTitulaire...
 
Est-ce normal?


 
Salut!
 
oui, c'est normal, car ma procédure P_OppositionCarte fonctionne très bien! C'est bien l'appel en boucle qui ne fonctionne pas...
 
 :cry:

Reply

Marsh Posté le 22-06-2005 à 18:46:43    

up

Reply

Marsh Posté le 23-06-2005 à 08:18:04    

autant pour moi, j'ai du sauter la ligne. Je cherche...

Reply

Marsh Posté le 26-06-2005 à 22:59:07    

Faut faire un premier "fetch next" avant d'entrer dans la boucle (avant le WHILE @@FETCH_STATUS = 0), parceque sinon, ben... Le @@FETCH_STATUS il est pas initialisé ;)

Reply

Marsh Posté le 26-06-2005 à 22:59:56    

PS: et le FETCH NEXT, doit être la dernière instruction de ta boucle, sinon ça va déconner ton bignou. Regarde bien l'exemple de l'aide.

Reply

Marsh Posté le 27-06-2005 à 19:42:40    

yop yop!
 
Merci j'avais trouvé en fait ;) ... mais je me suis fait chier un moment avant de me rendre compte que je devais avancer le curseur avant d'entrer dans la boucle :S
 
Merci quand meme! @++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed