Я пишу клиента в C, который отправляет запрос в Oracle БД, и когда я пытаюсь выбрать количество затронутых им строк, я всегда получаю значение 1. Это запрос:
char * query = "BEGIN "\
"INSERT INTO table_name ( field_1, field_2, id, field_3 ) VALUES ( :1, :2, :3, 1 );"\
"EXCEPTION "\
"when dup_val_on_index then "\
"UPDATE table_name SET field_1 =:4, field_2 =:5, field_3 = 1 where id = :6 and field_4 <= :7;"\
"END; ";
Я выполняю его, используя OCIStmtExecute
функцию OCI с OCI_COMMIT_ON_SUCCESS
, и, чтобы выбрать затронутые строки, я делаю:
ub4 update_count;
OCIAttrGet(stmthp, OCI_HTYPE_STMT, &update_count, 0, OCI_ATTR_ROW_COUNT, ctx->hp);
По какой-то странной причине update_count всегда равен 1 Это странно, потому что, если я отправлю простой запрос на обновление или вставку точно таким же образом, я получу правильный результат в update_count.
Есть ли что-нибудь, что нужно делать иначе при выполнении запроса в этой форме?