Определение наличия или отсутствия результирующего множества

Задача
Вы выполнили запрос, полученный от внешнего источника, и точно не знаете, возвращает ли он результирующее множество.

Решение
Проверьте количество столбцов в метаданных. Если оно равно 0, то результирующего множества нет.

Обсуждение
Если вы пишете приложение, принимающее строки запроса из внешних источников (файл, пользовательский ввод с клавиатуры), вы можете не знать, возвращает ли указанный запрос результирующее множество. А такая информация необходима, так как запросы, возвращающие результирующее множество, обрабатываются не так, как запросы, не возвращающие его.

Можно после выполнения запроса проверить значение метаданных, соответствующее количеству столбцов. Если считать, что запрос выполнился корректно, то нулевой счетчик столбцов показывает, что выполнялось предложение INSERT, UPDATE или какое-то другое, не возвращающее результирующее множество. Ненулевое значение означает наличие результирующего множества, так что вы можете приступать к извлечению строк. Этот прием позволяет отличать запросы SELECT от прочих, поскольку он применим и к запросам SELECT, возвращающим пустое результирующее множество.


(Пустое результирующее множество – это не то же самое, что его отсутствие. В первом случае строки не возвращаются, но количество столбцов отлично от 0, а во втором случае столбцов вообще нет.)Некоторые API предоставляют и другие способы распознавания типа запроса. В JDBC можно создавать произвольные запросы при помощи метода execute(), который явно указывает на наличие или отсутствие результирующего множества, возвращая «истину» или «ложь» соответственно. В Python значение cursor.description равно None для предложений, не формирующих результирующее множество.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Вывод списков таблиц и баз данных
Мониторинг сервера MySQL
Определение количества строк, обработанных запросом
Определение текущего пользователя MySQL
Определение текущей базы данных