使用oci方式查询数据,程序没有报错,但就是查询不到数据,哪位知道什么原因?下面是程序代码:
int sqlBindPara( void *con, GHashTable *paraGHashTable ) {
int rc;
ST_ORA_CONN_INFO *stOraConnInfo;
GList *keys;
gpointer data;
OCIBind *defnp1; stOraConnInfo = ( ST_ORA_CONN_INFO * ) con;
keys = NULL == paraGHashTable ? NULL : g_hash_table_get_keys( paraGHashTable );
while( NULL != keys ) {
data = g_hash_table_lookup ( paraGHashTable, ( char * ) keys->data );
rc = OCIBindByName( stOraConnInfo->stmt, &defnp1, stOraConnInfo->err,
(char *)keys->data, strlen( ( char * ) keys->data ),
data, strlen( data ) + 1, SQLT_STR, 0, 0,
0, 0, 0, OCI_DEFAULT );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -10;
}
OCIHandleFree( ( dvoid * )( defnp1 ),( ub4 ) OCI_HTYPE_BIND );
keys = g_list_next( keys );
}
return OCI_SUCCESS;
}
int sqlExecSelect( void *con, char *sql, GHashTable *paraGHashTable, GSList *resList ) {
int rc;
ST_ORA_CONN_INFO *stOraConnInfo;
int numCols, i;
OCIParam *colhd = (OCIParam *) 0;
ub2 type = 0, col_width;
text *col_name;
ub4 col_name_len;
ub1 char_semantics;
ST_PLACEHOLDERS_INFO *pstData;
g_message( "select ...\nsql->%s", sql );
stOraConnInfo = ( ST_ORA_CONN_INFO * ) con;
rc = OCIStmtPrepare( stOraConnInfo->stmt, stOraConnInfo->err, sql, strlen( sql ),
OCI_NTV_SYNTAX, OCI_DEFAULT );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -10;
}
rc = sqlBindPara( con, paraGHashTable );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -11;
}
rc = OCIStmtExecute( stOraConnInfo->svc, stOraConnInfo->stmt, stOraConnInfo->err,
0, 0, NULL, NULL, OCI_DESCRIBE_ONLY );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -12;
} rc = OCIAttrGet((dvoid *)stOraConnInfo->stmt, OCI_HTYPE_STMT, (dvoid *)&numCols,
(ub4 *)0, OCI_ATTR_PARAM_COUNT, stOraConnInfo->err );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -13;
}
g_message( "numCols->%d\n", numCols ); pstData = malloc( sizeof( ST_PLACEHOLDERS_INFO ) * numCols );
if( NULL == pstData ) {
g_message( "malloc error:%d->%s", errno, strerror( errno ) );
return -1301;
}
for( i = 1; i <= numCols; i ++ ) {
rc = OCIParamGet((dvoid *)(dvoid *)stOraConnInfo->stmt,
OCI_HTYPE_STMT, stOraConnInfo->err, (dvoid **)&colhd, i);
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -14;
}
rc = OCIAttrGet((dvoid*) colhd, (ub4) OCI_DTYPE_PARAM, (dvoid**) &col_name,
(ub4 *) &col_name_len, (ub4) OCI_ATTR_NAME,
(OCIError *) stOraConnInfo->err );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -15;
}
rc = OCIAttrGet((dvoid *)colhd, OCI_DTYPE_PARAM,
(dvoid *)&type, (ub4 *)0, OCI_ATTR_DATA_TYPE,
stOraConnInfo->err);
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -16;
}
rc = OCIAttrGet((dvoid*)colhd, (ub4) OCI_DTYPE_PARAM,
(dvoid*) &char_semantics,(ub4 *) 0, (ub4) OCI_ATTR_CHAR_USED,
(OCIError *) stOraConnInfo->err);
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -17;
}
if( char_semantics ) {
rc = OCIAttrGet((dvoid*)colhd, (ub4) OCI_DTYPE_PARAM,
(dvoid*) &col_width, (ub4 *) 0, (ub4) OCI_ATTR_CHAR_SIZE,
(OCIError *) stOraConnInfo->err );
} else {
rc = OCIAttrGet((dvoid*)colhd, (ub4) OCI_DTYPE_PARAM,
(dvoid*) &col_width,(ub4 *) 0, (ub4) OCI_ATTR_DATA_SIZE,
(OCIError *) stOraConnInfo->err );
}
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -18;
} g_message( "col->%s char_semantics->%d type->%d len->%d",
col_name, ( int )char_semantics, type, col_width );
switch( type ) {
case SQLT_CHR:
pstData[ i - 1 ].data.strData = malloc( col_width + 1 );
if( NULL == pstData[ i - 1 ].data.strData ) {
g_message( "malloc error:%d->%s", errno, strerror( errno ) );
freePData( pstData, numCols );
return -1801;
}
rc = OCIDefineByPos(stOraConnInfo->stmt, &stOraConnInfo->def,
stOraConnInfo->err, i, (dvoid *) pstData[ i - 1 ].data.strData,
(sb4) col_width+1,
SQLT_STR, (dvoid *) &pstData[ i - 1 ].ind, (ub2 *) 0,
(ub2 *) 0, OCI_DEFAULT);
pstData[ i - 1 ].type = SQLT_CHR;
break;
case SQLT_DAT:
pstData[ i - 1 ].data.strData = malloc( 10 + 1 );
if( NULL == pstData[ i - 1 ].data.strData ) {
g_message( "malloc error:%d->%s", errno, strerror( errno ) );
freePData( pstData, numCols );
return -1801;
}
rc = OCIDefineByPos(stOraConnInfo->stmt, &stOraConnInfo->def,
stOraConnInfo->err, i, (dvoid *) pstData[ i - 1 ].data.strData,
(sb4) 10+1,
SQLT_STR, (dvoid *) &pstData[ i - 1 ].ind, (ub2 *) 0,
(ub2 *) 0, OCI_DEFAULT);
pstData[ i - 1 ].type = SQLT_DAT;
break;
case SQLT_NUM:
rc = OCIDefineByPos(stOraConnInfo->stmt, &stOraConnInfo->def,
stOraConnInfo->err, i, (dvoid *) &pstData[ i - 1 ].data.dData,
(sb4) sizeof( double ),
SQLT_STR, (dvoid *) 0, (ub2 *) 0,
(ub2 *) 0, OCI_DEFAULT);
pstData[ i - 1 ].type = SQLT_NUM;
break; }
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -19;
}
}
rc = OCIStmtExecute ( stOraConnInfo->svc, stOraConnInfo->stmt,
stOraConnInfo->err, 1, 0, NULL, NULL,OCI_DEFAULT );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -1901;
}
while( 1 ) {
rc = OCIStmtFetch ( stOraConnInfo->stmt,stOraConnInfo->err,1,
OCI_FETCH_NEXT, OCI_DEFAULT );
if( OCI_NO_DATA == rc ) {
g_message( "OCI_NO_DATA" );
break;
} else if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -20;
}
for( i = 0; i < numCols; i ++ ) {
switch( type ) {
case SQLT_CHR:
g_message( "char -> %s", pstData[ i - 1 ].data.strData );
break;
case SQLT_DAT:
g_message( "date -> %s", pstData[ i - 1 ].data.strData );
break;
case SQLT_NUM:
g_message( "num -> %.2f", pstData[ i - 1 ].data.dData );
break; }
}
} return OCI_SUCCESS;
}
int sqlBindPara( void *con, GHashTable *paraGHashTable ) {
int rc;
ST_ORA_CONN_INFO *stOraConnInfo;
GList *keys;
gpointer data;
OCIBind *defnp1; stOraConnInfo = ( ST_ORA_CONN_INFO * ) con;
keys = NULL == paraGHashTable ? NULL : g_hash_table_get_keys( paraGHashTable );
while( NULL != keys ) {
data = g_hash_table_lookup ( paraGHashTable, ( char * ) keys->data );
rc = OCIBindByName( stOraConnInfo->stmt, &defnp1, stOraConnInfo->err,
(char *)keys->data, strlen( ( char * ) keys->data ),
data, strlen( data ) + 1, SQLT_STR, 0, 0,
0, 0, 0, OCI_DEFAULT );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -10;
}
OCIHandleFree( ( dvoid * )( defnp1 ),( ub4 ) OCI_HTYPE_BIND );
keys = g_list_next( keys );
}
return OCI_SUCCESS;
}
int sqlExecSelect( void *con, char *sql, GHashTable *paraGHashTable, GSList *resList ) {
int rc;
ST_ORA_CONN_INFO *stOraConnInfo;
int numCols, i;
OCIParam *colhd = (OCIParam *) 0;
ub2 type = 0, col_width;
text *col_name;
ub4 col_name_len;
ub1 char_semantics;
ST_PLACEHOLDERS_INFO *pstData;
g_message( "select ...\nsql->%s", sql );
stOraConnInfo = ( ST_ORA_CONN_INFO * ) con;
rc = OCIStmtPrepare( stOraConnInfo->stmt, stOraConnInfo->err, sql, strlen( sql ),
OCI_NTV_SYNTAX, OCI_DEFAULT );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -10;
}
rc = sqlBindPara( con, paraGHashTable );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -11;
}
rc = OCIStmtExecute( stOraConnInfo->svc, stOraConnInfo->stmt, stOraConnInfo->err,
0, 0, NULL, NULL, OCI_DESCRIBE_ONLY );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -12;
} rc = OCIAttrGet((dvoid *)stOraConnInfo->stmt, OCI_HTYPE_STMT, (dvoid *)&numCols,
(ub4 *)0, OCI_ATTR_PARAM_COUNT, stOraConnInfo->err );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
return -13;
}
g_message( "numCols->%d\n", numCols ); pstData = malloc( sizeof( ST_PLACEHOLDERS_INFO ) * numCols );
if( NULL == pstData ) {
g_message( "malloc error:%d->%s", errno, strerror( errno ) );
return -1301;
}
for( i = 1; i <= numCols; i ++ ) {
rc = OCIParamGet((dvoid *)(dvoid *)stOraConnInfo->stmt,
OCI_HTYPE_STMT, stOraConnInfo->err, (dvoid **)&colhd, i);
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -14;
}
rc = OCIAttrGet((dvoid*) colhd, (ub4) OCI_DTYPE_PARAM, (dvoid**) &col_name,
(ub4 *) &col_name_len, (ub4) OCI_ATTR_NAME,
(OCIError *) stOraConnInfo->err );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -15;
}
rc = OCIAttrGet((dvoid *)colhd, OCI_DTYPE_PARAM,
(dvoid *)&type, (ub4 *)0, OCI_ATTR_DATA_TYPE,
stOraConnInfo->err);
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -16;
}
rc = OCIAttrGet((dvoid*)colhd, (ub4) OCI_DTYPE_PARAM,
(dvoid*) &char_semantics,(ub4 *) 0, (ub4) OCI_ATTR_CHAR_USED,
(OCIError *) stOraConnInfo->err);
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -17;
}
if( char_semantics ) {
rc = OCIAttrGet((dvoid*)colhd, (ub4) OCI_DTYPE_PARAM,
(dvoid*) &col_width, (ub4 *) 0, (ub4) OCI_ATTR_CHAR_SIZE,
(OCIError *) stOraConnInfo->err );
} else {
rc = OCIAttrGet((dvoid*)colhd, (ub4) OCI_DTYPE_PARAM,
(dvoid*) &col_width,(ub4 *) 0, (ub4) OCI_ATTR_DATA_SIZE,
(OCIError *) stOraConnInfo->err );
}
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -18;
} g_message( "col->%s char_semantics->%d type->%d len->%d",
col_name, ( int )char_semantics, type, col_width );
switch( type ) {
case SQLT_CHR:
pstData[ i - 1 ].data.strData = malloc( col_width + 1 );
if( NULL == pstData[ i - 1 ].data.strData ) {
g_message( "malloc error:%d->%s", errno, strerror( errno ) );
freePData( pstData, numCols );
return -1801;
}
rc = OCIDefineByPos(stOraConnInfo->stmt, &stOraConnInfo->def,
stOraConnInfo->err, i, (dvoid *) pstData[ i - 1 ].data.strData,
(sb4) col_width+1,
SQLT_STR, (dvoid *) &pstData[ i - 1 ].ind, (ub2 *) 0,
(ub2 *) 0, OCI_DEFAULT);
pstData[ i - 1 ].type = SQLT_CHR;
break;
case SQLT_DAT:
pstData[ i - 1 ].data.strData = malloc( 10 + 1 );
if( NULL == pstData[ i - 1 ].data.strData ) {
g_message( "malloc error:%d->%s", errno, strerror( errno ) );
freePData( pstData, numCols );
return -1801;
}
rc = OCIDefineByPos(stOraConnInfo->stmt, &stOraConnInfo->def,
stOraConnInfo->err, i, (dvoid *) pstData[ i - 1 ].data.strData,
(sb4) 10+1,
SQLT_STR, (dvoid *) &pstData[ i - 1 ].ind, (ub2 *) 0,
(ub2 *) 0, OCI_DEFAULT);
pstData[ i - 1 ].type = SQLT_DAT;
break;
case SQLT_NUM:
rc = OCIDefineByPos(stOraConnInfo->stmt, &stOraConnInfo->def,
stOraConnInfo->err, i, (dvoid *) &pstData[ i - 1 ].data.dData,
(sb4) sizeof( double ),
SQLT_STR, (dvoid *) 0, (ub2 *) 0,
(ub2 *) 0, OCI_DEFAULT);
pstData[ i - 1 ].type = SQLT_NUM;
break; }
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -19;
}
}
rc = OCIStmtExecute ( stOraConnInfo->svc, stOraConnInfo->stmt,
stOraConnInfo->err, 1, 0, NULL, NULL,OCI_DEFAULT );
if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -1901;
}
while( 1 ) {
rc = OCIStmtFetch ( stOraConnInfo->stmt,stOraConnInfo->err,1,
OCI_FETCH_NEXT, OCI_DEFAULT );
if( OCI_NO_DATA == rc ) {
g_message( "OCI_NO_DATA" );
break;
} else if( OCI_SUCCESS != rc ) {
checkerr( stOraConnInfo->err, rc );
freePData( pstData, numCols );
return -20;
}
for( i = 0; i < numCols; i ++ ) {
switch( type ) {
case SQLT_CHR:
g_message( "char -> %s", pstData[ i - 1 ].data.strData );
break;
case SQLT_DAT:
g_message( "date -> %s", pstData[ i - 1 ].data.strData );
break;
case SQLT_NUM:
g_message( "num -> %.2f", pstData[ i - 1 ].data.dData );
break; }
}
} return OCI_SUCCESS;
}
如果没有,可以通过printf语句来输出一些中间结果,缩小问题查找范围