proc에서..do break가 나오는 현상은 무엇때문이죠??
글쓴이: shean0 / 작성시간: 금, 2003/01/24 - 10:15오전
왜 ..break.에러가 나는지 .....
프로시져에서두 do break.에러가 나오고... 간단한 이것에서두..나오는데..
똑같은 소스를 다른데서 돌리면 되는데....
"test.pc" 90 행, 1855 문자 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sqlca.h> #include <math.h> #define TRUE 1 #define FALSE 0 #define NAME_LENGTH 10 #define ARRAY_LENGTH 10 char *username; char *password; void sql_error(char *msg) ; int db_connect(); void db_close(); int matching_name_index(); int main() { matching_name_index(); } void sql_error(char *msg) { printf("\ni==first %s", msg); printf("\n% .70s \n", sqlca.sqlerrm.sqlerrmc); exec SQL WHENEVER SQLERROR CONTINUE; printf("\n==second %s", msg); printf("\n% .70s \n", sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK RELEASE; exit(EXIT_FAILURE); } int db_connect() { username="sean"; password ="sean_ocl"; EXEC SQL WHENEVER SQLERROR DO sql_error("connect oracle Error\n"); EXEC SQL CONNECT :username IDENTIFIED BY :password; printf("\n Connected to ORACLE as user: %s\n", username); return 1; } void db_close() { EXEC SQL WHENEVER SQLERROR DO sql_error("close error"); EXEC SQL COMMIT WORK RELEASE; } int matching_name_index() { int ret; EXEC SQL BEGIN DECLARE SECTION; int H_DE_ID; int H_NAME_LEN; char H_NODE_NAME[30]; EXEC SQL END DECLARE SECTION; ret=db_connect(); printf("============>ret db_connect[%d]\n",ret); H_DE_ID=100; printf("H_DE_ID=[%d]",H_DE_ID); /*==>EXEC SQL WHENEVER NOT FOUND DO break; */ EXEC SQL SELECT de_id,node_name,lengthb(node_name) INTO :H_DE_ID,:H_NODE_NAME,:H_NAME_LEN FROM rotis_node_0117 WHERE de_id =:H_DE_ID; if (sqlca.sqlcode == 1403) { printf("sqlerror 1403\n"); db_close(); } if (sqlca.sqlcode < 0) { printf("sqlerror 0 \n"); db_close(); } else db_close(); printf("H_DE[%d][%s][%d]\n",H_DE_ID,H_NODE_NAME,H_NAME_LEN); return 1; }
이렇게 실행하면..
Connected to ORACLE as user: sean ============>ret db_connect[1] H_DE_ID=[100]H_DE[100][수유사거리동단 ][14]
이런 결과가 나오는데요.. 이것을 본래 작업중이던 곳에 집어 넣으면..
==> 여기에
EXEC SQL WHENEVER NOT FOUND DO break; 이렇게 넣어두.넣지 않아두...
myproc.c: In function `matching_name_index':
myproc.c:980: break statement not within loop or switch
*** Error code 1
이럴때는 어떻게 해야하죠??? 이거 2일째 날새는 건데...
원래는 procedure로 짯었는데..안되어서..cursor 말구..그냥 단순 select로...하려구 하는데.. 원인을 모르겠네요..
Forums:
제 생각인데...
EXEC SQL WHENEVER NOT FOUND DO break;
위에꺼는 루프문이나 커서에서만 써야 할듯 싶네요...
두 가지 방법이 있을듯 싶네요. 저두 프로씨 초보라...
1, 2번 방법이 있는데 2번째 방법이 좋을듯 싶네요.
1. EXEC SQL WHENEVER NOT FOUND STOP;
STOP -> 프로그램 수행을 종료하고 COMMIT되지 않은 작없을 롤백시킨다.
2. EXEC SQL WHENEVER NOT FOUND GOTO label_name;
-> 이렇게 한번해보세요.
이렇게 해두 되네요...( 이제 procedure로 구현해 볼려구요..)
와..방금 그냥 해 본것인데...
님께서 말씀해주신것과..같네요...
그런데..말씀을 들으니...잘 아시는것 같은데..좋은 사이트 없나요..
이거 짤려구 하니..어디에서 문제가 생기는 것인지..고민해야 되는 부분이 너무 많아서요..더 공부를 해야 겠네요...
답변 감사드리며~~...
언제나 즐프를 꿈꾸며~
ProC 관련해서...
일단 제가 추천하는 싸이트는
otn.oracle.co.kr
가셔서 포럼방에 가보세요.
도움 될 만한 문서는 위에 싸이트 가셔서 ProC 문서 찾으시면
될껍니다. 한가지 아쉬운 점은 영어라 ㅡㅡ;
관련 도서는 영진.com 에서 나온 oracle bible Ver 8.x 2nd 에
기본적인 사항이 나와 있구요.
젤 좋은건 오라클에서 발간한 책입니다. ProC
근데 이건 구하기 어렵군요. 오라클 사야 되니까요.
아마 이책의 내용이 위에 싸이트에 있는 문서랑 똑같은 걸루 아는데 ㅡㅡ;
그럼 이만 (^^)(__)
댓글 달기