sourcecode

이름을 가진 커서가 이미 존재하는 이유는 무엇입니까?

codebag 2023. 8. 1. 20:29
반응형

이름을 가진 커서가 이미 존재하는 이유는 무엇입니까?

다음 트리거가 있습니다.

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

표에 삽입을 수행할 때 TDINCI

INSERT INTO TDINCI 
VALUES (1, '20150101', '20150115', '2015-2015')

오류가 발생합니다.

이름이 'detailsCursor'인 커서가 이미 있습니다.

나는 열어요

open detailsCursor;

커서를 닫습니다.

close detailsCursor;
deallocate detailsCursor;

커서의 범위에 제가 관리하지 않는 무언가가 있는 것이 아닐까요?

이 절차를 호출할 때마다 정의되는 전역 커서를 사용하고 있으며 동일한 오류가 표시됩니다.

로컬 커서를 정의합니다.그냥 키워드를 넣어주세요.LOCAL끝나고CURSOR:

declare detailsCursor CURSOR LOCAL FOR
...

언급URL : https://stackoverflow.com/questions/28786096/why-do-i-get-a-cursor-with-the-name-already-exists

반응형