ORA-00911: invalid character [proc 에서..에러]
이런 메세지가 왜 ...나오는지..도저히..소스를 봐도..
알수가없네요..
안녕하세요..지금 proc로 프로그램을 작성중인데요..
아래와 같은 에러때문에...이것이 일어나는 이유가 무엇인지..모르겠습니다.
Connected to ORACLE as user: sean //연결성공시 로그
search_name_node Error // whenever sqlerror 시 분기 함수
로그...
ORA-00911: invalid character // 그때의 내용입니다.
어떨때..이런 에러가 뜨는지...??
DB table struct 는
{
de_id number(4);
node_name varchar2(30);
....
}
입니다...
아래에서..주석으로 한 부분이 문제가 되는 부분같은데..어덯게 바꾸어야
할지...
>int search_name_node(char *buf,int count_name)
>{
>
> char what;
> int num_ret;
> EXEC SQL BEGIN DECLARE SECTION;
> int H_query_cnt;
> int H_DE_ID;
> int H_NAME_SIZE;
> char H_NODE_NAME[31];
> char Sqlcmd[100]; /* 질문1:여기에 table구조대로 모든
변수를 셋팅해야 하나요?*/
> EXEC SQL END DECLARE SECTION;
>
> memset(tmp_buf,0x0,sizeof(tmp_buf));
> memset(Sqlcmd,0x0,sizeof(Sqlcmd));
> memcpy(tmp_buf,"11",2);
> sprintf(Sqlcmd,"%s","Select de_id,node_name from rotis_node_0117 where
de_id in ( 4001, 500 ,9999,5000) order by de_id;");
> /*<=======여기서 임의의 query스트링을 만들어서 (예를 들면
9999,1111,2222 이런 de_id 가 생성되는 로직이 들어갑니다....===>*/
> printf("Sqlcmd[%s]\n",Sqlcmd);
> what=0x03; /* Rotis query result를 만든다. */
> num_ret=0;
>
> db_connect();
>
>/* #ifdef IDONTKNOW <=======*/
> EXEC SQL WHENEVER SQLERROR DO sql_error("search_name_node Error \n");
> EXEC SQL PREPARE my_cur3 FROM :Sqlcmd;
> EXEC SQL DECLARE MY_STM1 CURSOR FOR my_cur3;
> EXEC SQL OPEN MY_STM1;
> while(1)
> {
> EXEC SQL FETCH MY_STM1 INTO :H_DE_ID,:H_NODE_NAME;
> printf("[%04d]", H_DE_ID);
> printf("[%s]", H_NODE_NAME);
> printf("\n");
> }
> EXEC SQL CLOSE MY_STM1 ; /**질문2: 이게 맞는가요? 이렇게 바꾸었더니
컴파일 되네요...<===my_cur3; **/
> EXEC SQL COMMIT WORK RELEASE;
>/* #endif **/
printf("ending==");
>}
pro*c에서 //의 주석은 통하지 않습니다.모든 주석은 /* */로
pro*c에서 //의 주석은 통하지 않습니다.
모든 주석은 /* */로만 가능합니다.
물론 c에서와 같이 주석안에 주석은 허용되지 않습니다.
invallid char...
Connected to ORACLE as user: sean //연결성공시 로그
search_name_node Error // whenever sqlerror 시 분기 함수
로그...
ORA-00911: invalid character // 그때의 내용입니다.
아 .. 이것은 왼쪽이 실제 프로그램 돌았을때 로그(printf)구요..그냥 옆에다가 //해서 주석처럼 달은것 뿐입니다.
분명이..무엇이 틀린것일텐데..컴파일시에는 아무 이상이 없다고 나오거든요...
런 타임에서나오는데...이거 왜그런지...
언제나 즐프를 꿈꾸며~
에러가 날때의 sql문을 찍어보세요..
아래는 00911 이 발생했을때의 쿼리문입니다.
ORA-00911: invalid character
Query :"SELECT * FROM (SELECT T.*,rownum AS rnum FROM (SELECT * FROM hj WHERE h_title BETWEEN '移? AND '?? ) T ORDER BY T.h_num DESC)"
보시는거 처럼 문자가 이상한 값들어가면 발생하는 에러 입니다.
쿼리문이나 패치하는 칼럼의 값을 체크 해보셔야 겠네요..
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
아마도 query문 뒤에 ; 를 빼면 될것 같군여.. ^^
아마도 query문 뒤에 ; 를 빼면 될것 같군여.. ^^
다시 한번 올립니다..
그런데.. #ifdef ~#endif 안에 있는것처럼... where DE_ID IN ( XX,TT,yy..)
이렇게 xx,TT,yy 의 갯수가 바뀌거든요.
그래서 처음에 질문드린것처럼 sprintf로 select문을 만들어서..query하려구 하는데...
후..이거 3일째...
언제나 즐프를 꿈꾸며~
아..정말로 감사드립니다... 그런데#define 으로..
아..
아.. 정말로 감사드립니다...
그건 어떻게 생각하지두 못햇던것인데...
그런데...그거 있는것과 없는것의 차이는 무엇이죠??? ::
그리고.. 한가지만 더요.
지금
from TABLE_NAME 에서 테이블네임을
#define TABLE_NAME my_ex_table
이렇게 하니깐.. table을 못 찿는다고 나오던데요??
proc는 define적용되는 부분이
select
from XXX <== 여기는 적용되는 범위가 아닌가요??
언제나 즐프를 꿈꾸며~
proc에서 procedure호출 방법은??
아래에서
를 만들고..아래와 같이 실행하였습니다
여기까지 했는데... 실제 proc에서 호출을 하는 예제를 본 적이 없어서..
어떻게 호출해야 하는지.. 알려주셨으면 합니다..
그리고 호출하는 곳에서 for 문으로 count 만큼 돌릴것인데...DB에 무리 없겠죠..처음에는 select문에 IN(...)을 써서 조회할려구 했는데..IN의 갯수가 한정적이라고 해서.. count가 보통 100개정도 되거든요...
조언을 부탁드립니다..꾸벅..
언제나 즐프를 꿈꾸며~
not in break 에서요...
이렇게 하고..나니 ...컴파일이 되는가 더니...
이런 결과가...이거는 왜..나오는지??????
또 옵션이 있는건가요? ..
그리고 오라클 에러 처리에 대해서...자료 없을까요?? 이거는 처음 사용해 보아서...어디에서 에러가 나올지..도대체..예상을 할 수가 없거든요..매번 부탁만...
꾸벅
언제나 즐프를 꿈꾸며~
댓글 달기