私はノーを得ようとしています。Oracle DB のテーブルからのエントリの。アプリケーションは C で開発されており、mySql lib を使用してデータベースにアクセスしています。前述したように、db レイヤーで Oracle を使用し、アプリケーションで mysql 関数を使用しています。これは、libmysqlora を使用して行われます。「select count(*) from 」のようなクエリを発行すると、実際のカウントの最初の 3 桁しか取得できません。以下は、これを読むための私のコード全体です。
int64_t vmsdb_read_count(char *table, char *query)
{
uint i;
MYSQL_ROW row;
boolean free_query = FALSE;
if (query == NULL) {
newvallocate(char, query, SHORT_QUERY_SIZE);
snprintf(query, SHORT_QUERY_SIZE, "select count(*) from %s", table);
free_query = TRUE;
}
if (mysql_query(mysql, query)) {
exiterr(Q_NOTICE, query);
goto ERROR;
}
if (!(res = mysql_store_result(mysql))) {
exiterr(Q_NOTICE, "MySQL failed to store results. ");
goto ERROR;
}
while((row = mysql_fetch_row(res))) {
for (i=0 ; i < mysql_num_fields(res); i++) {
int64_t count = atoll(row[i]);
mysql_free_result(res);
res = NULL;
if (free_query) {
vfree(query);
free_query = FALSE;
}
return (count);
}
}
mysql_free_result(res);
res = NULL;
ERROR:
if (free_query) {
vfree(query);
}
return 0;
}
テーブル「宛先」の場合、sqlplus で行をカウントすると:
SQL> select count(*) from destination;
17928
しかし、これに前述の関数を使用すると:
printf("No. of rows in destination table = %d\n", vmsdb_read_count("destination", NULL));
output--> No. of rows in destination table = 179
このテーブルだけでなく、データベース内の他のすべてのテーブルでも、関数はカウント値の最初の 3 桁のみを返します。これの原因は何ですか?そして、どうすればこの問題を解決できますか?