Why do I get "A cursor with the name already exists"?
63,748
You are using global cursor that will be defined each time you are calling this procedure and give you the same error.
Define a local cursor. Just put the keyword LOCAL
after CURSOR
:
declare detailsCursor CURSOR LOCAL FOR
...
Author by
Erick Asto Oblitas
A net developer. Languages: C# F# Javascript C++ Java Time, the only constant.
Updated on July 09, 2022Comments
-
Erick Asto Oblitas almost 2 years
I have this trigger:
CREATE TRIGGER CHECKINGMAXQTYDAYSVACANCY ON TDINCI AFTER INSERT AS DECLARE @incidentCode int, @dateStart datetime, @dateEnd datetime, @daysAccumulated int, @maxDaysAvailable int set @daysAccumulated = 0; select @incidentCode = CO_INCI from inserted; select @maxDaysAvailable = IN_DIAS_GANA from TCINCI where CO_INCI = @incidentCode; declare detailsCursor CURSOR FOR select FE_INIC, FE_FINA from TDINCI where CO_INCI = @incidentCode; open detailsCursor; if CURSOR_STATUS('variable', 'detailsCursor') >= 0 begin fetch next from detailsCursor into @dateStart, @dateEnd; while @@FETCH_STATUS = 0 begin set @daysAccumulated = @daysAccumulated + (DATEDIFF(DAY, @dateStart, @dateEnd) + 1); fetch next from detailsCursor into @dateStart, @dateEnd; end close detailsCursor; deallocate detailsCursor; end IF(@maxDaysAvailable > @daysAccumulated) BEGIN RAISERROR ('No se pueden ingresar mas dias de los programados en la cabecera de incidencias.', 16, 1); ROLLBACK TRANSACTION; RETURN END GO
When I do a Insert to the table TDINCI
INSERT INTO TDINCI VALUES (1, '20150101', '20150115', '2015-2015')
I get an error:
A cursor with the name 'detailsCursor' already exists.
I open
open detailsCursor;
and close the cursor.
close detailsCursor; deallocate detailsCursor;
Maybe there is something with the scope of cursor that I don't manage? Thanks in advance.
-
Aravin over 3 yearswhat is the difference ?