EXEC SQL WHENEVER SQLERROR CONTINUE에 대한 설명을 부탁드립니

shean0의 이미지

음.. 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 현상이 일어납니다.
혹시나..이런 경우에 문제가 되는 것인지 문의 드립니다.                 
codebank의 이미지

Pro*C를 접한지 오래되어서 기억기 가물거리지만...

1) 질문은 sql_error를 뺏을때 어떠한 동작을하는지 겠지요?
제가 기억하기로는 프로그램이 종료되는것으로 알고 있습니다.
모든 실행이 멈춰지고 더이상의 동작없이 exit되는것으로 알고 있는데...
그것때문에 사용자 에러함수를 선언해주는거 아닐까요?

2) 두번째 insert된것에 대한 조치사항이겠군요.
정확하게 값이 들어가있다면 문제가 없겠지만(그래도 위험한 데이터라는 인식은
남아있겠죠.) 문제는 그것이 정확한지 정확하지 않은지에 있고 그것에 대한 처리가
어떻게 되는가에 있겠죠.
제가 기억하기로는 그값은 쓰레기값으로 처리가 되었던것으로 기억됩니다.
그리고 메모리풀의경우는 Linux에서 발생한 경우가 아닐까요? Oracle을 정가에
주고 사서 설치하면 Oracle측에서 몇가지 설정을 잡아주고 가던데... 그 제품에는
그러한 에러가 발생할 경우 조치사항이 들어있던것 같네요.
즉, Linux용으로 배포되는 버젼은 Oracle 전체기능이 탑제된것이 아닌 Oracle을
선전하기 위한 부분만 들어가 있고 실제 데이터베이스의 안전성에 해당되는 부분은
돈을 주고 구입해야만 보장이 되는것으로 알고 있습니다.
만일 정품을 구입해서 질문하신 에러가 발생했다면 Oracle A/S팀에 연락을 해서
처리를 해달라고 하는것이 좋습니다.

Oracle측에서 Linux용 Oracle을 배포하는 이유는 사용자를 확보하기 위한 수단이지
일반 사용자에게 편의성을 제공하기 위한 수단은 아니라고 봅니다.
즉, Linux용 Oracle에서 발생하는 문제가 판매되는 Oracle에서도 동일하게 일어
난다고 생각하시면 안된다는 뜻입니다. 단지 어떻게 사용을 하고 어떤 동작을 하는지
만을 알아보시라고 권하고 싶네요. 그리고 발생되는 에러에 대해서는 Oralce측에
직접문의를 해보시는것도 좋은 경험이 되실겁니다.(어떠한 대답을 할지 궁금하군요. :-))

답변이 부실한점 죄송합니다.

------------------------------
좋은 하루 되세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.