MSSQL에서 오라클로 데이터를 밀어넣는 작업중이었다.
MSSQL 프로시져에서 트랜잭션을 유지하려고 TRY... CATCH문을 이용했는데...
계속 '커서가 이미 있다'는 에러가 떨어지는 것이었다.
커서 사용 문법을 한 백번 정도 쳐다봤는데 이상 없었다. 아무리봐도 맞게 썼다. 그러다 찾았다.
이 문제는 이게 어플리케이션(C#) 프로그램이었으면 금방 찾았을 것이다. 어플리케이션에서 try catch시 catch문에 들어가면 오브젝트들 자원해제를 해준다. finally에서 하기도 하고..
그것 때문이었다. 열려진 커서가 예외상황이 발생하면서 오픈되채로 catch문으로 들어가 버려서 나는 에러였다.
아~~
그래서 TRY CATCH문에 아래와 같이 처리했다.
BEGIN TRY
DECLARE CURSOR CUR FOR
.......
OPEN CUR
FETCH NEXT ....
WHILE ....
BEGIN
.......
FETCH NEXT....
END
CLOSE CUR
DEALLOCATE CUR
END TRY
BEGIN CATCH
IF EXISTS (SELECT 1 FROM SYS.SYSCURSORS WHERE CURSOR_NAME = 'CUR')
BEGIN
CLOSE CUR
DEALLOCATE CUR
END
END CATCH
위 구문을 추가하니 해결됬다.
이것과 관련 없는 다른 에러가 난건 안 자랑.. ㅠㅠ
'프로그래밍 > DBMS' 카테고리의 다른 글
MSSQL 테이블 사용하는 프로시저 찾기 (0) | 2017.09.21 |
---|---|
Oracle 연결시에 BadImageFormatException 32비트 문제 발생 시 (2) | 2016.11.22 |
오라클 IF.. ELSEIF 문 쓰다가 맨붕옴 ㅠㅠ (2) | 2016.01.28 |
오라클 SELECT .. INTO 시 결과 없을 때 처리 방법 (3) | 2016.01.28 |
ROLLUP 총계만 필요할 때 (0) | 2014.12.03 |
MSSQL 테이블 목록 조회 (0) | 2014.12.03 |
오라클 WITH문과 CREATE TABLE 쓰기 (0) | 2014.11.24 |
MSSQL varchar 데이터 형식을 datetime 데이터 형식으로 변환하는 중 값 범위를 벗어났습니다. (0) | 2014.08.12 |