EXEC SQL WHENEVER SQLERROR CONTINUE에 대한 설명을 부탁드립니
글쓴이: shean0 / 작성시간: 일, 2003/10/26 - 12:13오전
음.. proc에서 계속적으로 의문이 되는
EXEC SQL WHENEVER SQLERROR CONTINUE; 이 문장이 의미하는 것에 대해서 문의 드립니다.
예를 들면
/* Declare error handling function. */ void sql_error(msg) char *msg; { char err_msg[128]; size_t buf_len, msg_len; EXEC SQL WHENEVER SQLERROR CONTINUE; //<==이것을 빼면 어떻게 될까.. 있으면.어떤 기능인지?? printf("\n%s\n", msg); buf_len = sizeof (err_msg); sqlglm(err_msg, &buf_len, &msg_len); printf("%.*s\n", msg_len, err_msg); DB_ERROR_CHECK++; //<== 제가 넣은것이구요. EXEC SQL ROLLBACK RELEASE; /* exit(EXIT_FAILURE); */ }
continue는
select 또는 insert둥의 내용이
int check_DB() { EXEC SQL WHENEVER SQLERROR DO sql_error("checkDB\n"); select ~~~ insert ~~ select~~ RELEASE; //RELEASE 이것도 heap처럼 사용되겠지???? //호출한 프로세스가 죽으면 반납될까??? //즉시..아니면...오라클스케즐러가 할까?? }이해 하기로는 내부적으로 sql문 수행중 에러가 발생할때 goto처럼 동작한다.
이렇게 알고 있는데.
그 호출된 함수 내부에 continue가 존재하니.. 그냥 사용했지만서두...갑자기
궁금하군요.. 여태까지..왜 고민하지 않았을까도..그렇구.
그래서 pc-->c 로 컴파일한 화일을 보아도...음..해석이 어렵더군요..
만약 이것을 sql_error에서 뺀다면..어떻게 되는것인지???
궁금합니다.
문의2]
EXEC SQL ROLLBACK RELEASE; 여기 RELEASE를 하지 않고.. 연결된 상태로 호출한 프로세스가 죽는다면..오라클에서는 어떻게 자원을 관리하는지요??? 간단하게.. 말하면.. connect +insert+commit+insert=>die된경우에요. ||<==여기까지는 commit된것을 확인했는데요. 문제는 나중에 된것에서.. rollback되어진것으로 예상되는데.. 프로세스의 문제때문인지.. shared Memory Pool 현상이 일어납니다. 혹시나..이런 경우에 문제가 되는 것인지 문의 드립니다.
Forums:
Pro*C를 접한지 오래되어서 기억기 가물거리지만...1) 질문은
Pro*C를 접한지 오래되어서 기억기 가물거리지만...
1) 질문은 sql_error를 뺏을때 어떠한 동작을하는지 겠지요?
제가 기억하기로는 프로그램이 종료되는것으로 알고 있습니다.
모든 실행이 멈춰지고 더이상의 동작없이 exit되는것으로 알고 있는데...
그것때문에 사용자 에러함수를 선언해주는거 아닐까요?
2) 두번째 insert된것에 대한 조치사항이겠군요.
정확하게 값이 들어가있다면 문제가 없겠지만(그래도 위험한 데이터라는 인식은
남아있겠죠.) 문제는 그것이 정확한지 정확하지 않은지에 있고 그것에 대한 처리가
어떻게 되는가에 있겠죠.
제가 기억하기로는 그값은 쓰레기값으로 처리가 되었던것으로 기억됩니다.
그리고 메모리풀의경우는 Linux에서 발생한 경우가 아닐까요? Oracle을 정가에
주고 사서 설치하면 Oracle측에서 몇가지 설정을 잡아주고 가던데... 그 제품에는
그러한 에러가 발생할 경우 조치사항이 들어있던것 같네요.
즉, Linux용으로 배포되는 버젼은 Oracle 전체기능이 탑제된것이 아닌 Oracle을
선전하기 위한 부분만 들어가 있고 실제 데이터베이스의 안전성에 해당되는 부분은
돈을 주고 구입해야만 보장이 되는것으로 알고 있습니다.
만일 정품을 구입해서 질문하신 에러가 발생했다면 Oracle A/S팀에 연락을 해서
처리를 해달라고 하는것이 좋습니다.
Oracle측에서 Linux용 Oracle을 배포하는 이유는 사용자를 확보하기 위한 수단이지
일반 사용자에게 편의성을 제공하기 위한 수단은 아니라고 봅니다.
즉, Linux용 Oracle에서 발생하는 문제가 판매되는 Oracle에서도 동일하게 일어
난다고 생각하시면 안된다는 뜻입니다. 단지 어떻게 사용을 하고 어떤 동작을 하는지
만을 알아보시라고 권하고 싶네요. 그리고 발생되는 에러에 대해서는 Oralce측에
직접문의를 해보시는것도 좋은 경험이 되실겁니다.(어떠한 대답을 할지 궁금하군요. :-))
답변이 부실한점 죄송합니다.
------------------------------
좋은 하루 되세요.
댓글 달기