2011-11-03 3 views
0

프로 시저 (p1)를 만들었습니다. 이 절차는 커서 (c1)를 엽니 다. 그리고 커서의 각 행에 대해 루프에서 다른 프로 시저 (p2)를 호출합니다. 절차는 22 초에서 120 초까지 걸립니다. 절차 P1에서 커서 c1을 열고 닫은 다음 할당을 취소합니다. 이것은 잘 작동합니다.루프에서 커서 호출

이제 프로 시저 P1에 입력이 있습니다. 그래서 커서 (c2)로 다른 프로 시저 (p3)를 작성했습니다. 커서 c2가 p1에 입력됩니다. 이제 C2의 행 수는 1403입니다. 따라서 P3에서 P1, 1403을 호출합니다. 그리고이 오류가 생성 :

Error: Cursor trying to open C1, is already open.

내가 SQL 서버는 C2에 많은 행이 동시에 P1을 실행하려고 것으로 알고 있습니다. C1이 이미 열려 있기 때문에 오류가 발생합니다.

어떤 생각이든, 어떻게 한 번에 하나씩 P1을 실행하도록 P3을 제한 할 수 있습니까?

답변

2

P1에서 커서 C1을 어떻게 선언합니까? LOCAL 또는 GLOBAL 커서입니까? LOCAL 커서는 단일 프로 시저의 범위 내에서만 사용되므로 원하는만큼 여러 번 선언 할 수 있어야합니다. GLOBAL/LOCAL은 커서 정의되지 않은 경우

DECLARE customerCursor LOCAL 

, 그것은 GLOBAL로 시작합니다 (CURSOR_DEFAULT에서) 데이터베이스 기본값을 사용합니다.

위의 내용이 도움이되지 않는다면 간편한 테스트를 위해 단순화 된 버전의 절차를 볼 수 있습니까?

감사합니다. M

+0

고맙습니다. 이것은 트릭을했다. –