커서가 존재하는지 확인하는 방법(열림 상태
커서가 열려 있는지 확인하려면 어떻게 해야 합니까?왜냐하면 'Cursor is already exists'라는 오류가 자주 발생하기 때문입니다.커서가 이미 열린 상태인지 어떻게 확인할 수 있는지 알려주세요.
실제로 마지막에 할당 해제뿐만 아니라 종료했습니다(CLOSE ppm_cursor; DELOCALATE ppm_cursor;). 하지만 여전히 동일한 오류가 발생하고 있습니다.
CURSOR_STATUS 함수를 사용하여 상태를 확인할 수 있습니다.
IF CURSOR_STATUS('global','myCursor')>=-1
BEGIN
DEALLOCATE myCursor
END
커서를 닫고 비어 있으면 할당 취소:
IF CURSOR_STATUS('global','myCursor') >= -1
BEGIN
IF CURSOR_STATUS('global','myCursor') > -1
BEGIN
CLOSE myCursor
END
DEALLOCATE myCursor
END
Gary W가 'SELECT'를 추가하여 언급한 내용에 약간의 변경만 추가:
IF (SELECT CURSOR_STATUS('global','myCursor')) >= -1
BEGIN
DEALLOCATE myCursor
END
http://social.msdn.microsoft.com/Forums/en/sqlgetstarted/thread/eb268010-75fd-4c04-9fe8-0bc33ccf9357
이전 답변을 확장하면 커서가 열려 있거나 할당된 것이 걱정되는 경우 이 프로세스를 호출하는 데 유용합니다.
CREATE OR ALTER PROCEDURE dbo.CloseAndDeallocateCursor
@cursorName NVARCHAR(80)
AS
BEGIN
IF CURSOR_STATUS('global', @cursorName) >= -1
BEGIN
DECLARE @SQL NVARCHAR(91)
IF CURSOR_STATUS('global', @cursorName) > -1
BEGIN
SET @SQL = N'CLOSE ' + @cursorName
EXEC sp_executeSQL @SQL
END
SET @SQL = N'DEALLOCATE ' + @cursorName
EXEC sp_executeSQL @SQL
END
END
GO
그리고 샘플 사용...
EXEC dbo.CloseAndDeallocateCursor 'myCursor'
DECLARE myCursor STATIC
FOR SELECT * FROM blah
저는 커서를 거의 사용하지 않지만, 여기서 여러분을 물어뜯을 수 있는 다른 항목을 발견했습니다. 커서 이름의 범위입니다.
CURSOR_DEFAULT 데이터베이스가 전역인 경우 특정 이름(예: "cur")으로 저장 프로시저에서 커서를 선언하면 "cursor already exists" 오류가 발생하며, 해당 커서가 열려 있는 동안 동일한 이름(예: "cur")으로 커서를 선언하고 여는 다른 저장 프로시저를 호출합니다.이 오류는 "cur"를 열려고 할 때 중첩된 저장 프로시저에서 발생합니다.
다음 SQL 비트를 실행하여 CURSOR_DEFAULT를 확인합니다.
select is_local_cursor_default from sys.databases where name = '[your database name]'
이 값이 "0"이면 중첩된 커서의 이름을 지정하는 방법이 중요합니다!
이 문제는 커서를 레코드 위에 놓고 닫기 전에 반복하기 위해 사용하는 동안 SSMS에서 실행 중인 저장 프로시저에서 오류가 발생했을 때 발생했습니다.이 문제를 해결하기 위해 CATCH 블록에 추가 코드를 추가하여 커서가 아직 열려 있으면 닫습니다(여기의 다른 답변에서 제시한 대로 CURSOR_STATUS 사용).
언급URL : https://stackoverflow.com/questions/7430560/how-to-check-if-cursor-exists-open-status
'codememo' 카테고리의 다른 글
| 테이블 가운데에 새 열을 삽입하시겠습니까? (0) | 2023.08.01 |
|---|---|
| NS Dictionary에 추가하는 방법 (0) | 2023.08.01 |
| SKlearn, 그리드 검색: 실행 중 진행 상황을 출력하는 방법은 무엇입니까? (0) | 2023.08.01 |
| 셀 소모를 최소화하기 위한 배치 요청 (0) | 2023.08.01 |
| Javascript: 5의 다음 배수로 반올림합니다. (0) | 2023.08.01 |