TQuery 하고 프로시져를 써서 프로그램을 짜는데요..
DB를 많이 왔다 갔다 하거든요..
근데 몇 번 왔다 갔다 하면
'ORA-01000 최대 열기 커서수를 초과 했습니다.'
이런 메세지가 뜹니다.
그래서 Query 가 안 닫아졌나 싶어서 Query 를 다 찾아서 try finally구문을
사용해서 다 닫아줬거든요..
try
...
finally
Query.Close;
Query.Free;
end;
이렇게요..
그리고 프로시져 호출 부분에선 안 닫아 줬구요.. (디비안의 프로시져에서
닫아주기 때문에..) 그리고 프로시져는
with StoredProc2 do begin
Close;
StoredProcName := 'P_DELETECHK_TEMP';
DatabaseName := DM_Alias;
Params[0].Asinteger := id;
ExecProc;
end;
이런식으로 썼어요.. 혹시나 해서 ExecProc; 문장 다음에 Close 와 Free 를
썼더니 에러가 나더라구요..
DB관련 된 부분은 다 닫아준 것 같은데 왜 에러가 나는지 모르겠어요..
혹시 프로시져를 다른 방법으로 닫아줘야 하는지..
그리고 DB보니까 맥시멈 커서 수가 300으로 되어있거든요..
프로그램 실행시키면서 300개나 커서를 열었을리는 없을텐데..
며칠동안 찾아 봤는데.. 아무리 찾아도 모르겠어요..
도움 부탁드려요..
전에도 이런문제로 찾아 보았는데..
무한 루프일 가능성.. 프로그램에서 작은 실수로 인해서 발생하는 경우가 대부분..
어떤 프로시저에서 다른 프로시저를 호출했는데.. 그 프로시저 내부에.. 호출한 프로시저를 또 호출하는 경우.. 해당 프로시저에서 Query를 사용한다면.. 금방 'ORA-01000 최대 열기 커서수를 초과 했습니다.'이라는 메시지를 출력하죠...
프로시저를 차례로 Step By Step으로 따라가 보세요..^^
참고>여기서 프로시저란 DB상의 Stored Procedure가 아닌 프로그램상의 procedure나 function을 얘기함..
그럼.
*^^* 즐거운하루 *^^*