0

I'm using host arrays to insert and update data as shown in Oracle manual. Here is a bit of code:

in my_func(void* ctx, int run_id, DB_DATA** db_data)
{
   int i = 0;

   EXEC SQL BEGIN DECLARE SECTION;
   int ora_id_run[BULK_SIZE];
   int ora_term_id[BULK_SIZE];
   int ora_seq_num[BULK_SIZE];
   int ora_resp[BULK_SIZE];
   char ora_timestamp[BULK_SIZE][27];
   EXEC SQL END   DECLARE SECTION;

   for (i = 0; i < BULK_SIZE; i++)
   {
       ora_id_run[i]      = run_id;
       ora_term_id[i]     = db_data[i]->term_id;
       ora_seq_num[i]     = db_data[i]->seq_num;
       ora_resp[i]        = db_data[i]->resp;

       memset(ora_timestamp[i], '\0', sizeof(ora_timestamp[i]));
       strncpy(ora_timestamp[i], db_data[i]->timestamp, strlen(db_data[i]->timestamp));     
   }

    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL CONTEXT USE :ctx;

    EXEC SQL UPDATE T_TABLE
                SET RESP = :ora_resp,
                 ELAPSED = TO_TIMESTAMP(:ora_timestamp, 'DD-MM-RR HH24:MI:SS.FF') - DT
            WHERE ID_RUN = :ora_id_run
             AND ID_TERM = :ora_term_id
             AND SEQ_NUM = :ora_seq_num;

    if (sqlca.sqlcode != 0)
    {
        ORA_ERROR;
    }

    EXEC SQL COMMIT WORK;

    return sqlca.sqlcode;
}

BULK_SIZE is about 200, 300, 500. And sometimes the number of rows updated is less than BULK_SIZE (I've checked it with sqlerrd[2]).
Why?

too honest for this site
  • 12,050
  • 4
  • 30
  • 52
hasnobrains
  • 109
  • 6

1 Answers1

0

Solved!
Sometimes in updating bulk I got rows that were not inserted yet.

hasnobrains
  • 109
  • 6