Это немного за пределами моего опыта, но так как никто не отвечает, я сделаю попытку.
Я вспоминаю, что существует какой-то обратный вызов обработчика ошибок, который вы можете установить. Поскольку вы можете получить информацию об ошибке с помощью OCIErrorGet
(?), Я предполагаю, что она запускает нормальные механизмы обработки ошибок. Возможно ли, что есть обработчик ошибок, который закрывает соединение, когда происходит «ошибка», не проверяя этот особый случай?
Это также напоминает мне о проблеме, с которой я давно столкнулся, если вы передадите неверный тип дескриптора функциям OCI, они могут ошибочно работать. Судя по документам OCIErrorGet
, вы можете передать OCI_HTYPE_ERROR
и дескриптор среды или OCI_HTYPE_ENV
и дескриптор ошибки.
Вы звоните OCIErrorGet
несколько раз? Oracle может генерировать несколько ошибок, может быть, вам нужно восстановить их все, прежде чем продолжить? Но это не кажется разумным.
Помимо этих длинных кадров, я бы попробовал простой пример OCI или любой пример кода из Oracle, чтобы увидеть, есть ли у него такая же проблема. Если нет, то работайте задом наперед, чтобы найти, что имеет значение.