Дескрипторы инструкций

Инструкция является наиболее легкой инструкцией SQL, например SELECT * FROM Employee. Однако инструкция является не просто инструкцией SQL— она состоит из всех сведений, связанных с этой инструкцией SQL, таких как все результирующие наборы, созданные инструкцией и параметрами, используемыми в выполнении инструкции. Оператор даже не должен иметь инструкцию SQL, определяемую приложением. Например, если функция каталога, например SQLTables , выполняется в инструкции, она выполняет предопределенную инструкцию SQL, которая возвращает список имен таблиц.

Каждая инструкция определяется дескриптором инструкции. Инструкция связана с одним подключением, и с этим подключением может быть связано несколько инструкций. Некоторые драйверы ограничивают количество активных инструкций, которые они поддерживают; Параметр SQL_MAX_CONCURRENT_ACTIVITIES в SQLGetInfo указывает, сколько активных инструкций, поддерживаемых драйвером в одном подключении. Оператор считается активным, если для него ещё ожидаются результаты, где под результатами понимаются либо результирующий набор, либо количество строк, затронутых оператором INSERT, UPDATE или DELETE, либо данные отправляются несколькими вызовами SQLPutData.

В части кода, реализующей ODBC (диспетчер драйверов или драйвер), дескриптор оператора идентифицирует структуру, содержащую сведения об операторе, например:

  • Состояние инструкции

  • Диагностика текущего уровня инструкций

  • Адреса переменных приложения, привязанных к параметрам инструкции и столбцам результирующего набора

  • Текущие параметры каждого атрибута инструкции

Дескриптора инструкций используются в большинстве функций ODBC. Примечательно, что они используются в функциях для привязки параметров и столбцов набора результатов (SQLBindParameter и SQLBindCol), подготовки и выполнения операторов (SQLPrepare, SQLExecute и SQLExecDirect), получения метаданных (SQLColAttribute и SQLDescribeCol), выборки результатов (SQLFetch) и получения диагностической информации (SQLGetDiagField и SQLGetDiagRec). Они также используются в функциях каталога (SQLColumns, SQLTables и т. д.) и ряде других функций.

Дескрипторы операторов выделяются с помощью SQLAllocHandle и освобождаются с помощью SQLFreeHandle.