이게 도움이 되실지...
ora-01036: illegal variable name/number at runtime on the EXECUTE of
a dynamic SQL statement.
Solution :
This is often caused by improper error checking on the PREPARE statement.
If the statement is not parsed correctly (the prepare statement fails) and
this is not detected properly by the program, the EXECUTE can fail with the
ORA-01036 error or with similar errors. Make sure that you check
sqlca.sqlcode after the PREPARE explicitly or implicitly with a WHENEVER
SQLERROR statement.
>>김동철 님께서 쓰시길<<
:: 2001/03/27 11:07:47 exeName.cgi funcName sqlca.sqlerrm.sqlerrmc ORA-01036: illegal variable name
:: /number
:: -1036
::
:: 프로씨로 씨지아이를 짜던 도중 만났습니다.
:: 상황은
:: showClass(ClsSchId,varName)
:: char varName[];
:: int ClsSchId;
:: {
:: fprintf(cgiOut,"<select size="1" name=%s>\n",varName);
:: memset(sqlCmd,0x00,sizeof(sqlCmd));
::
:: sprintf(sqlCmd,"SELECT ClsClass FROM Class WHERE ClsStuId=%d",ClsSchId);
::
:: EXEC SQL PREPARE SQL_Class FROM :sqlCmd;
:: EXEC SQL DECLARE CUR_Class CURSOR FOR SQL_Class;
:: EXEC SQL OPEN CUR_Class;
::
:: while (1) {
:: EXEC SQL FETCH CUR_Class INTO :ClsClasstmp;
::
:: if (sqlca.sqlcode == ERR_NODATA) {
:: EXEC SQL CLOSE CUR_Class;
:: break;
:: }
:: EXEC SQL SELECT CODCONTENT INTO :CodContent FROM CODE WHERE CodKind = '08' AND CodCode =
:: :ClsClasstmp;
:: CodContent.arr[CodContent.len]=0x00;
:: fprintf(cgiOut,"<option value="%s">%s</option>\n",ClsClasstmp.arr,CodContent.arr);
:: }
::
:: fprintf(cgiOut,"</select>\n");
:: }
:: 이 부분을 실행시킨후...
::
::
:: sprintf(sqlCmd,"select ClsClass, ClsGrade, ClsKind from class where clsstuid=%d",SchId);
::
:: EXEC SQL PREPARE SQL_AdmT FROM :sqlCmd;
:: EXEC SQL DECLARE CUR_AdmT CURSOR FOR SQL_AdmT;
:: EXEC SQL OPEN CUR_AdmT;
::
:: while (1) {
:: StuCount=0;
:: EXEC SQL FETCH CUR_AdmT
:: INTO :ClsClass,:ClsGrade,:ClsKind;
:: if (sqlca.sqlcode == ERR_NODATA) {
:: EXEC SQL CLOSE CUR_AdmT;
:: break;
:: }
:: ClsClass.arr[ClsClass.len]=0x00;
:: ClsGrade.arr[ClsGrade.len]=0x00;
:: ClsKind.arr[ClsKind.len]=0x00;
::
:: EXEC SQL SELECT COUNT(*) INTO :StuCount FROM STUDENT WHERE StuSchId=:SchId AND StuClass=
:: :ClsClass;
:: /* DEBUG */ saveMsg("exeName.cgi", "funcName", "sqlca.sqlerrm.sqlerrmc",ClsClass.arr ,ClsClass.l
:: en);
:: 바로 위 질이어를 실행시키고 에러를 찍어보니까...
::
:: 걱정됩니다. 고수님들 부탁드립니다.
::
|