Основы проектирования приложений баз данных

       

Курсоры


Применение курсоров позволяет приложению выполнять выборку одной или нескольких строк за одну операцию извлечения данных. Также курсоры поддерживают возможность применения операторов UPDATE, INSERT и DELETE к текущей позиции курсора.

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

Для использования курсора требуется выполнить следующие действия:

  1. Установить атрибуты курсора, вызвав функцию SQLSetStmtAttr. Эта функция позволяет устанавливать следующие атрибуты: SQL_ATTR_CURSOR_TYPE и SQL_ATTR_CONCURRENCY, или SQL_CURSOR_SCROLLABLE и SQL_CURSOR_SENSITIVITY.
  2. Определите размер результирующего набора, вызвав функцию SQLSetStmtAttr с атрибутом SQL_ATTR_ROW_ARRAY_SIZE.
  3. Для того чтобы использовать позиционированный SQL-оператор с фразой WHERE CURRENT OF, следует определить имя курсора, вызвав функцию SQLSetCursorName.
  4. Для создания результирующего набора следует выполнить SQL-оператор SELECT, вызвав функцию SQLExecute или функцию SQLExecDirect.
  5. Если имя курсора не было предварительно определено, но требуется использовать возможность применения позиционированного SQL-оператора с фразой WHERE CURRENT OF, то следует создать имя курсора, вызвав функцию SQLGetCursorName.
  6. Для получения информации о количестве столбцов в сформированном результирующем наборе можно вызвать функцию SQLNumResultCols.
  7. Определите связывание столбцов результирующего набора с буфером, предназначенным для извлечения значения столбца (одной строки или сразу набора строк).
  8. Выполните функцию ODBC API, извлекающую строки из результирующего набора в связанный буфер (или функцию, выполняющую извлечение поочередно каждого столбца в указываемый параметром буфер, если не было выполнено предварительного связывания).
  9. Если выполняемый SQL-оператор состоял из нескольких операторов SELECT, то сформированный результирующий набор будет состоять из нескольких множеств. Для перехода к следующему множеству (результирующему набору) используется функция SQLMoreResults. В том случае, если следующее множество существует, то эта функция выполняет переход к нему и возвращает код ответа SQL_SUCCESS. Если выбраны все множества сформированного результирующего набора, то функция возвращает код ответа SQL_NO_DATA.
  10. Для освобождения дескриптора оператора вызовите функцию SQLFreeStmt. При этом для того, чтобы одновременно выполнить освобождение связанных с данным оператором буферов, используемых для извлечения значений столбцов, установите значение параметра fOption равным SQL_UNBIND.



Содержание раздела