Главная ]
3.5.Определение неизвестного типа инструкции во время выполнения
Программирование
Базы данных



Приложение может использовать isc_dsql_sql_info () чтобы определить  тип инструкции неизвестный при подготовке инструкции, например когда инструкция вводится пользователем во время выполнения.

Запрашиваемая информация может включать:

-         Тип инструкции

-         Число параметров ввода требуемое для инструкции

-         Число параметров вывода возвращаемое инструкцией

-          Детальную информацию относительно каждого входного параметра или выходного значения , включая его тип данных, масштаб, и длину.

Чтобы использовать isc_dsql_sql_info (), выделите буфер списка элементов, который описывает тип требуемой информации, и выделите буфер результатов, куда функция может возвращать нужную информацию. Например, чтобы определить  неизвестный тип инструкции, но подготовленной инструкции, вы должны выделить буфер списка элементов с одним элементом, и заполнять его макро константой  isc_info_sql_stmt_type, определенной в ibase.h:

  char type_item[];

type_item[] = {isc_info_sql_stmt_type};

  Обратите внимание, что дополнительная информация о макросах для требуемых элементов может быть найдена в ibase.h по комментарию, “ SQL information items."

Буфер результатов должен быть достаточно большим, чтобы содержать любые данные, возвращенные запросом. Надлежащий размер для этого буфера зависит от требуемой информации. Если не достаточно выделенной памяти куда isc_dsql_sql_info () помещает предопределенное значение, то в последний байт буфера результатов помещается isc_info_truncated. Вообще, когда запрашивается информация о типе инструкции то 8 байт - достаточный размер буфера. Объявление размера больше чем необходимо буферу безопасно. Запрос  идентифицирующий тип инструкции возвращает следующую информацию в буфер результатов:

1. Первый байт содержит isc_info_sql_stmt_type.

2. Второй байт содержит число n говорящее о том сколько байт занимает следующее значение.

3. Один или два байта определяют  тип инструкции. Следующая таблица показывает возвращаемые типы инструкций:

  Тип                                                     Числовое значение

isc_info_sql_stmt_select                                 1

isc_info_sql_stmt_insert                                  2

isc_info_sql_stmt_update                                3

isc_info_sql_stmt_delete                                 4

isc_info_sql_stmt_ddl                                     5

isc_info_sql_stmt_get_segment                       6

isc_info_sql_stmt_put_segment                       7

isc_info_sql_stmt_exec_procedure                 8

isc_info_sql_stmt_start_trans             9

isc_info_sql_stmt_commit                               10

isc_info_sql_stmt_rollback                              11

isc_info_sql_stmt_select_for_upd                  12

 

4. Последний байт, содержит значение isc_info_end (0).

 

Значения, помещенные в буфер результатов не выровнены. Кроме того, все числа представлены в универсальном формате, с самым младшим байтом сначала, и страшим  байтом в конце. Числа со знаком имеют признак в последнем байте. Преобразуйте числа к типу данных, присущему к вашей системе перед их интерпретацией.

Обратите внимание, что вся информация относительно инструкции кроме ее типа может быть более легко определена,  вызывав другие функции кроме isc_dsql_sql_info (). Например, чтобы определить информацию, для заполнения структуры ввода XSQLDA, вызовите isc_dsql_describe_bind (). Чтобы заполнить структуру вывода XSQLDA, вызовите isc_dsql_prepare () или isc_dsql_describe ().  

<< Назад ] Содержание ] Далее >> ]

 

Дизайн: Piton Alien
Rambler's Top100 Рейтинг@Mail.ru
Сайт создан в системе uCoz