2013-06-13 4 views
1

Я должен написать OCI код для простого запроса, как Select * from emp;OCI вызова для оператора выбора

Поскольку я не знаю, сколько строк будет возвращено, я не могу заранее выделить мои буфера Таким образом я определяю void ** указатель в то время как я связываю мой выходные буферы.

Идея заключается в том, чтобы вызвать OCIStmtExecute с iters = 0 так

Для ЗЕЬЕСТА, если Iters отличен от нуля, то определяет, должны быть сделаны для дескриптора. Выполнение выполняет выбор строк в эти предопределенные буферы и предваряет больше строк в зависимости от количества строк предварительной выборки. Если вы не знаете, сколько строк выведет оператор SELECT, установите его равным нулю.

Эта функция возвращает ошибку, если iters = 0 для операторов без SELECT.

После этого я планирую сделать OCIAttrGet(OCI_ATTR_ROW_COUNT), чтобы получить числа в строки, возвращаемых оператором выбора, а затем выделить память для выходных буферов, а затем вызвать OCIStmtFetch, указав количество строк, следовательно, вернулся.

Но число строк, которое я получаю, равно 0 каждый раз, даже если есть данные, возвращаемые таблицей.

Есть ли какой-то недостаток с моим подходом? Не могли бы вы указать недостаток

ответ

0

Вам просто нужно выделить место для одной строки, а затем вызвать OCIStmtFetch2() несколько раз, пока не дойдете до конца набора результатов (который даст код ошибки 1403). Предварительная выборка происходит в буфер, поддерживаемый самим OCI, прозрачно для вас, поэтому этот метод не является неэффективным.

Смежные вопросы