Что такое курсор в sql

Курсоры в Mysql.

)ENGINE=InnoDB
AUTO_INCREMENT=11 CHARACTER SET ‘utf8’ COLLATE ‘utf8_bin’

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

Select `bank`.* FROM `bank` LIMIT НОМЕР_НУЖНОЙ_НАМ_ЗАПИСИ,1

Поясним теперь подробнее. Сначала HANDLER, он нужен для обработки исключения — что делать когда данные закончатся ( то есть курсор будет пустым ). Таким образом когда данные закончатся, не с генерируется сообщение об ошибке, а значение переменной done выставиться в 1, изначально done = 0; подробнее об SQLSTATE читаем тут — dev.mysql.com/doc/refman/5.1/en/error-messages-server.html;

Error: 1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA)

Message: No data — zero rows fetched, selected, or processed

SQLSTATE: 02000 срабатывает когда достигнут конец курсора, или когда select или update возвращяет пустую строку.

Следующей строкой мы объявили курсор DECLARE cursor_name CURSOR FOR select_statement;
Открываем курсор Open cursor_name;
Дальше пока не достигаем конец курсора (WHILE done = 0 DO ) извлекаем данные и обрабатываем их.
Перед выходом из хранимой процедуры необходимо курсор закрыть. Close cursor_name;

Вроде ничего сложного. Но с SQLSTATE ‘02000’ связанно много подводных камней.

WHILE done = 0 DO
FETCH BankCursor INTO vBankId,vBankName,vAddress,vPhone;
/* извлечем для банка сумму любого из его вкладов */
Select (ContributeAmount) INTO vContributeAmountSUM FROM bankdistribution where BankId = vBankId limit 1;
делаем какие то действия
END WHILE ;

WHILE done = 0 DO
FETCH BankCursor INTO vBankId,vBankName,vAddress,vPhone;
/* извлечем для банка сумму любого из его вкладов */
Select Сount(ContributeAmount) INTO vContributeAmountSUM FROM bankdistribution where BankId = vBankId limit 1;
/* проверим действительно ли есть вклады в этом банке */
if (vContributeAmountSUM > 0) then
/* извлечем для банка сумму любого из его вкладов */
Select ContributeAmount INTO vContributeAmountSUM FROM bankdistribution where BankId = vBankId limit 1;
end if ;
делаем какие то действия
END WHILE ;

первым запросом мы проверили а есть ли вклады (если их нет то vContributeAmountSUM == 0 ) и только если таковые имеются мы извлекаем данные.

теперь допустим нам нужно излечь общую сумму на счетах в разных банках у каждого клиента
Declare ClientSummCursor Cursor for Select sum

Declare ClientSummCursor Cursor for Select sum (`bankdistribution`.`ContributeAmount`),`bankdistribution`.`ClientId` FROM `bankdistribution` Inner Join client on (client.ClientId = bankdistribution.`ClientId`) where 1 group by `bankdistribution`.`ClientId`;

может возникнуть та же ситуация, когда данные в курсоре ClientSummCursor, закончатся раньше чем данные в BankCursor, сработает SQLSTATE: 02000, переменная done установится в 1, и цикл while закончиться раньше чем мы ожидали. Этого можно избежать поступив следующим образом

Всем дочитавшим до этого места спасибо, надеюсь это статься покажется кому то полезной.

Источник

Что такое курсор?

Операции в реляционной базе данных выполняются над множеством строк. Набор строк, возвращаемый инструкцией SELECT, содержит все строки, которые удовлетворяют условиям, указанным в предложении WHERE инструкции. Такой полный набор строк, возвращаемых инструкцией, называется результирующим набором. Приложения, особенно интерактивные и интерактивные, не всегда эффективно работают с результирующим набором как единое целое. Им нужен механизм, позволяющий обрабатывать одну строку или небольшое их число за один раз. Курсоры являются расширением результирующих наборов, которые предоставляют такой механизм.

Курсор реализуется библиотекой курсоров. Библиотека курсоров — это программное обеспечение, которое часто реализуется как часть системы базы данных или API доступа к данным, которое используется для управления атрибутами данных, возвращаемых из источника данных (результирующий набор). Эти атрибуты включают управление параллелизмом, положение в результирующем наборе, число возвращаемых строк и возможность перемещения вперед или назад (или и то, и другое) с помощью результирующего набора (прокрутка).

Курсор отслеживает позицию в результирующем наборе и позволяет выполнять несколько операций по строкам в результирующем наборе с возвратом к исходной таблице или без него. Иными словами, курсоры основываются на концептуальном возврате результирующего набора на основе таблиц в базах данных. Курсор имеет имя, так как указывает текущую позицию в результирующем наборе, так же как курсор на экране компьютера указывает на текущую позицию.

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

С помощью курсоров можно выполнять следующие задачи:

Укажите положение в конкретных строках результирующего набора.

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

Изменение данных в строках в текущей позиции результирующего набора.

Определите различные уровни чувствительности к изменениям данных, внесенным другими пользователями.

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

Курсоры можно использовать различными способами:

С некоторыми или всеми строками в одной таблице.

С некоторыми или всеми строками из логически соединяемых таблиц.

Для чтения или обновления на уровне курсора или поля.

Как однопроходные или полностью прокручиваемые.

С набором ключей курсора, расположенным на сервере.

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

Существующий на сервере или клиенте.

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

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

Параллелизм

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

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

Положение

Курсор также отслеживает текущую позицию в результирующем наборе. Можно рассматривать положение курсора как указатель на текущую запись, аналогично тому, как индекс массива указывает на значение в определенном месте в массиве.

Прокручиваемость

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

Источник

Курсоры SQL Server

Курсоры позволяют усовершенствовать обработку результатов:

позиционируясь на отдельные строки результирующего набора;

получая одну или несколько строк от текущей позиции в результирующем наборе;

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

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

предоставляя инструкциям Transact-SQL в скриптах, хранимых процедурах и триггерах доступ к данным результирующего набора.

В некоторых сценариях при наличии первичного ключа для таблицы цикл WHILE может использоваться вместо курсора, что позволяет избежать недостатков, присущих курсорам. Однако существуют сценарии, когда курсоры не только неизбежны, но и действительно необходимы. В этом случае, если не требуется выполнять обновление таблиц с учетом курсора, используйте курсоры firehose, то есть курсоры быстрой прокрутки и только для чтения.

Реализации курсоров

SQL Server поддерживает три способа реализации курсоров.

курсоры Transact-SQL

Серверные курсоры интерфейса прикладного программирования (API)

Курсоры API поддерживают функции курсоров API в OLE DB и ODBC. Курсоры API реализуются на сервере. Всякий раз, когда клиентское приложение вызывает функцию курсора API, поставщик OLE DB или драйвер ODBC для собственного клиента SQL Server передает требование на сервер для выполнения действия в отношении серверного курсора API.

Клиентские курсоры

Клиентские курсоры реализуются внутренне драйвером ODBC для собственного клиента SQL Server и библиотекой DLL, реализующей API-интерфейс ADO. Клиентские курсоры реализуются посредством кэширования всех строк результирующего набора на клиенте. Каждый раз, когда клиентское приложение вызывает функцию курсора API, драйвер ODBC для собственного клиента SQL Server или ADO DLL выполняет операцию курсора на строках результирующего набора, кэшированных на клиенте.

Типы курсоров

SQL Server поддерживает четыре типа курсоров.

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

Однонаправленный

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

Хотя в моделях курсоров API базы данных курсор последовательного доступа рассматривается как курсор отдельного типа, в SQL Server принят другой подход. SQL Server принимает однонаправленность и возможность прокрутки курсоров как параметры, которые могут быть применены к статическим, управляемым набором ключей и динамическим курсорам. Transact-SQL курсоры поддерживают однонаправленные статические, управляемые набором ключей и динамические курсоры. Модели курсора API базы данных предполагают, что статические, управляемые набором ключей и динамические курсоры всегда могут быть прокручены. Если атрибут или свойство курсора API базы данных установлены в значение «однонаправленный», SQL Server реализует это как однонаправленный динамический курсор.

Статические

Полный результирующий набор статического курсора создается в базе данных tempdb при открытии курсора. Статический курсор всегда отображает результирующий набор точно в том виде, в котором он был при открытии курсора. Статическими курсорами обнаруживаются лишь некоторые изменения или не обнаруживаются вовсе, но при этом в процессе прокрутки такие курсоры потребляют сравнительно мало ресурсов.

SQL Server статические курсоры всегда доступны только для чтения.

Так как результирующий набор статического курсора хранится в рабочей таблице базы данных tempdb, то размер строк результирующего набора не может превышать максимальный размер строк таблицы SQL Server.
Дополнительные сведения см. в описании рабочих таблиц в руководстве по архитектуре обработки запросов. Дополнительные сведения о максимальном размере строк см. в разделе Спецификации максимально допустимых параметров SQL Server.

Transact-SQL использует для описания статических курсоров термин «нечувствительный». Некоторые интерфейсы API баз данных называют их курсорами моментальных снимков.

Keyset

Членство и порядок строк в курсоре, управляемом набором ключей, являются фиксированными при открытии курсора. Такие курсоры управляются с помощью набора уникальных идентификаторов — ключей. Ключи создаются из набора столбцов, который уникально идентифицирует строки результирующего набора. Набор ключей — это набор ключевых значений всех строк, попадающих под действие инструкции SELECT на момент открытия курсора. Набор ключей, управляющий курсором, создается в базе данных tempdb при открытии курсора.

Динамический

В планах динамических курсоров никогда не используются пространственные индексы.

Запрос курсора

SQL Server поддерживает два метода запроса курсоров.

Язык Transact-SQL поддерживает синтаксис для использования курсоров, созданных в соответствии с синтаксисом курсоров ISO.

API-функции курсоров базы данных.

SQL Server поддерживает функциональность курсоров для следующих API-интерфейсов баз данных:

ADO (Microsoft ActiveX Data Object);

открытый интерфейс доступа к базам данных (ODBC).

Обработка курсоров

Transact-SQL и API-курсоры имеют различный синтаксис, но для всех курсоров SQL Server используется одинаковый цикл обработки.

Связать курсор с результирующим набором инструкции Transact-SQL и задать его характеристики (например возможность обновления строк).

Выполнить инструкцию Transact-SQL для заполнения курсора.

Получить в курсор необходимые строки. Операция получения в курсор одной и более строк называется выборкой. Выполнение серии выборок для получения строк в прямом или обратном направлении называется прокруткой.

При необходимости выполнить операции изменения (обновления или удаления) строки в текущей позиции курсора.

Источник

DECLARE CURSOR (Transact-SQL)

Определяет такие атрибуты серверного курсора языка Transact-SQL, как свойства просмотра и запрос, используемый для построения результирующего набора, на котором работает курсор. Инструкция DECLARE CURSOR поддерживает как синтаксис стандарта ISO, так и синтаксис, использующий набор расширений языка Transact-SQL.

Что такое курсор в sql. Смотреть фото Что такое курсор в sql. Смотреть картинку Что такое курсор в sql. Картинка про Что такое курсор в sql. Фото Что такое курсор в sqlСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

cursor_name
Имя определенного серверного курсора Transact-SQL. Аргумент cursor_name должен соответствовать требованиям, предъявляемым к идентификаторам.

SQL Server неявным образом преобразует курсор в другой тип, если предложения в аргументе select_statement вызывают конфликт с функциями курсора запрошенного типа.

UPDATE [OF column_name [,. n]]
Определяет обновляемые столбцы в курсоре. Если OF [, ] указан, вносить изменения можно только в перечисленные столбцы. Если инструкция UPDATE используется без списка столбцов, то обновление возможно для всех столбцов.

cursor_name
Имя определенного серверного курсора Transact-SQL. Аргумент cursor_name должен соответствовать требованиям, предъявляемым к идентификаторам.

GLOBAL
Указывает, что курсор является глобальным по отношению к соединению. Имя курсора может использоваться любой хранимой процедурой или пакетом, которые выполняются в соединении. Курсор неявно освобождается только в случае разрыва соединения.

STATIC
Указывает, что курсор всегда отображает результирующий набор в том виде, который он имел на момент первого открытия курсора, и создает временную копию данных, предназначенную для использования курсором. Все запросы к курсору обращаются к этой временной таблице в базе данных tempdb. Поэтому результаты инструкций вставки, обновления и удаления данных в базовых таблицах не влияют на данные, возвращаемые запросами на извлечение к курсору, и курсор не обнаруживает изменения, внесенные в членство, порядок или значения результирующего набора после открытия курсора. Статические курсоры могут обнаруживать результаты собственных инструкций обновления, удаления и вставки, хотя это и не обязательно. Например, предположим, что статический курсор извлекает строку, а другое приложение затем обновляет ее. Если приложение извлекает строку из статического курсора, оно получает значения без изменений, внесенных другим приложением. Поддерживаются все типы прокрутки.

KEYSET
Указывает, что членство или порядок строк в курсоре неизменны при его открытии. Набор ключей, однозначно определяющих строки, встроен в таблицу в базе данных tempdb с именем keyset. Возможности этого курсора по обнаружению изменений с одной стороны похожи на возможности статического курсора, а с другой — динамического. Так же как статический курсор, он не всегда обнаруживает изменения, внесенные в членство и порядок элементов результирующего набора. Так же как динамический курсор, он обнаруживает изменения, внесенные в значения строк результирующего набора. Такие курсоры управляются с помощью набора уникальных идентификаторов — ключей. Ключи создаются из набора столбцов, который уникально идентифицирует строки результирующего набора. Набор ключей — это набор ключевых значений всех строк, возвращаемых инструкцией запроса. При использовании управляемых наборами ключей курсоров ключ создается для каждой строки курсора и сохраняется на клиентском компьютере или на сервере. При обращении к строке сохраненный ключ используется для получения текущих значений данных из источника данных. В курсоре, управляемом набором ключей, членство в результирующем наборе становится фиксированным, когда набор ключей полностью заполняется. Поэтому результаты операций добавления и обновления, влияющих на членство, не включаются в результирующий набор до повторного открытия. Изменения в значениях данных (внесенные владельцем набора ключей или другими процессами) видны при прокрутке результирующего набора пользователем.

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

DYNAMIC
Определяет курсор, который отображает все изменения данных, сделанные в строках результирующего набора, при просмотре этого курсора и извлечении новой записи независимо от того, были ли изменения произведены внутри курсора или извне другими пользователями. Поэтому посредством такого курсора видны результаты всех инструкций вставки, обновления и удаления, выполненных всеми пользователями. Значения данных, порядок и членство строк в каждой выборке могут меняться. Параметр выборки ABSOLUTE динамическими курсорами не поддерживается. Обновления, сделанные вне курсора, не видны до момента фиксации (если только уровень изоляции транзакций с курсорами не имеет значение UNCOMMITTED ). Например, предположим, что динамический курсор извлекает две строки, а другое приложение затем обновляет одну из них и удаляет другую. Если после этого динамический курсор снова извлекает эти две строки, он не найдет удаленную строку, а для обновленной строки отобразит новые значения.

TYPE_WARNING
Указывает, что клиенту будет отправлено предупреждение, если курсор неявно будет преобразован из одного запрашиваемого типа в другой.

SQL Server неявным образом преобразует курсор в другой тип, если предложения в аргументе select_statement вызывают конфликт с функциями курсора запрошенного типа. Дополнительные сведения см. в разделе «Неявные преобразования курсора».

Remarks

DECLARE CURSOR определяет такие атрибуты серверного курсора языка Transact-SQL, как свойства просмотра и запрос, используемый для построения результирующего набора, на котором работает курсор. Инструкция OPEN заполняет результирующий набор, а оператор FETCH возвращает из него строку. Инструкция CLOSE очищает текущий результирующий набор, связанный с курсором. Инструкция DEALLOCATE освобождает ресурсы, используемые курсором.

Первая форма инструкции DECLARE CURSOR использует синтаксис ISO для задания параметров работы курсора. Вторая форма инструкции DECLARE CURSOR использует расширения языка Transact-SQL, позволяющие определять курсоры с помощью таких же типов, как типы, используемые в курсорных функциях API баз данных, таких как ODBC и ADO.

Ссылки на курсоры могут производиться только другими инструкциями языка Transact-SQL. Функции API баз данных не могут ссылаться на курсоры. Например, после объявления курсора функции и методы OLE DB, ODBC или ADO не могут ссылаться на его имя. Строки курсора не могут быть выбраны с помощью соответствующих функций и методов API; для этой цели необходимо использовать инструкции FETCH языка Transact-SQL.

Приведенные ниже хранимые процедуры могут быть использованы для определения свойств курсора после его объявления.

Системные хранимые процедурыОписание
sp_cursor_listВозвращает список курсоров, доступных для соединения в настоящий момент времени, а также их атрибуты.
sp_describe_cursorОписывает атрибуты курсора, например имеет ли он тип «forward-only» или «scrolling».
sp_describe_cursor_columnsОписывает атрибуты столбцов результирующего набора.
sp_describe_cursor_tablesОписывает базовые таблицы, к которым курсор получает доступ.

Переменные могут использоваться в качестве составных частей выражения select_statement, объявляющего курсор. Значения переменных курсора после его объявления не изменяются.

Разрешения

По умолчанию разрешения DECLARE CURSOR предоставляются всем пользователям, имеющим разрешения SELECT для используемых курсором представлений, таблиц и столбцов.

Ограничения

Нельзя использовать курсоры или триггеры в таблице с кластеризованным индексом columnstore. Это ограничение не применяется к некластеризованным индексам columnstore. Курсоры и триггеры можно использовать в таблице с некластеризованным индексом columnstore.

Примеры

A. Использование простого курсора и синтаксиса

Результирующий набор, создаваемый при открытии данного курсора, включает в себя все строки и столбцы таблицы. Этот курсор можно обновлять, все обновления и удаления представлены в выборке для этого курсора. FETCH NEXT является единственно доступной выборкой, так как параметр SCROLL не был определен.

Б. Использование вложенных курсоров для вывода отчета

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

Источник

Учебное пособие по курсору MySQL и пример кода

В этом руководстве вы найдете краткое описание использования курсоров MySQL в хранимой процедуре, хранимых функциях или триггерах для выполнения результата оператора SELECT.

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

А также в этом руководстве я не буду обсуждать хранимые процедуры, функции или триггеры. Вместо этого я просто покажу вам, как можно использовать курсоры MySQL для выполнения результатов в хранимых процедурах.

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

Особенности курсора MySQL

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

Основное использование

Общий синтаксис объявления курсора в MySQL прост. Начнем с использования ключевого слова DECLARE, как показано в примере запроса ниже/

Как объявить курсор

Имя_курсора — это имя, присвоенное курсору во время объявления. Обратите внимание, что объявление курсора должно быть после любых объявленных переменных, чтобы MySQL не приводил к ошибкам.

Далее идет SELECT_expression, в котором хранится оператор SELECT, связанный с курсором.

Как открыть курсор

Как только у нас объявлен курсор и MySQL знает, что курсор существует, мы можем начать его использовать, что требует открытия курсора.

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

Эта команда открывает курсоры, на которые ссылается ее имя, и ее можно использовать.

Как получить данные

Открытие курсора позволяет получить информацию, хранящуюся в процедуре, функции или триггере.

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

ПРИМЕЧАНИЕ. Как уже упоминалось, убедитесь, что курсор используется после объявления переменных, чтобы избежать ошибок.

Как закрыть и отпустить курсор

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

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

Вам не нужно объявлять курсор после оператора закрытия.

Общий синтаксис закрытия курсора показан в запросе ниже:

Обработка ошибок

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

В качестве решения определяется обработчик NOT FOUND. Это указывает действие, которое необходимо предпринять, если следующая строка не найдена.

Общий синтаксис обработки ошибок при использовании курсора:

Конечное значение — это переменная, используемая для указания того, что курсор достиг конца результата. Имя переменной может быть любым, если оно соответствует соглашению об именах переменных MySQL.

ПРИМЕЧАНИЕ. Как и все переменные, используемые в курсоре, она должна быть определена до использования в курсоре.

Пример использования

Давайте создадим курсор, который собирает электронные письма клиентов, доступные в таблице клиентов образца базы данных Sakila.

Ресурс для загрузки и установки базы данных Sakila находится ниже:

Ниже показана процедура, в которой для получения писем используется курсор:

После выполнения запроса вы получите результат, как показано ниже:

Что такое курсор в sql. Смотреть фото Что такое курсор в sql. Смотреть картинку Что такое курсор в sql. Картинка про Что такое курсор в sql. Фото Что такое курсор в sql

Заключение

В этом руководстве мы рассмотрели использование курсоров MySQL для анализа данных, хранящихся в наборе результатов. Изучите документацию, чтобы понять, как реализовать курсоры.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *