le_duc PlaTyPuS | 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 :
- CREATE PROCEDURE dbo.P_InterdictionTitulaire
- @idTitulaire int,
- @I_idTypeOpposition int,
- @I_commentaireOpposition varchar(200)
- AS
- -- Création du curseur qui nous permettra de passer toutes les cartes du titulaire en revue
- DECLARE C_CartesTitulaire CURSOR
- FOR SELECT noInterne FROM CARTE WHERE idTitulaire = @idTitulaire
- DECLARE @noInterneCarte int
- -- Si le champ interdicition est à 0, on procède à l'interdiction,
- -- sinon le titulaire est déjà en interdiction!
- IF ((SELECT interdiction FROM TITULAIRE WHERE idTitulaire = @idTitulaire) = 0)
- BEGIN
- -- On ouvre le curseur
- OPEN C_CartesTitulaire
- -- Tant qu'il y a des résultats, on lance l'opposition sur les cartes
- WHILE @@FETCH_STATUS = 0
- BEGIN
- FETCH NEXT FROM C_CartesTitulaire INTO @noInterneCarte
- -- On fait appel à la PS d'opposition d'une carte
- EXEC dbo.P_OppositionCarte
- @noInterne = @noInterneCarte,
- @idTypeOpposition = @I_idTypeOpposition,
- @commentaireOpposition = @I_commentaireOpposition
- END
- -- Fermeture du curseur et désallocation
- CLOSE C_CartesTitulaire
- DEALLOCATE C_CartesTitulaire
- -- Mise à jour du titulaire (interdit = TRUE (1), date début d'interdiction et date fin!)
- UPDATE TITULAIRE
- SET interdiction = 1,
- dateDebutInterdiction = GETDATE(),
- dateFinInterdiction = NULL
- -- date de fin à NULL, car on ne sait pas encore quand l'interdiction prendra fin!
- WHERE idTitulaire = @idTitulaire
- END
- ELSE
- BEGIN
- RAISERROR ('Le titulaire est déjà en interdiction!', 16, 1)
- RETURN
- END
- 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
|