Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Новое на сайте

Инструкция FETCH советы и хитрости программирования

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

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

Хотя здесь инструкция FETCH подробно рассмотрена отдельно от других, с ней всегда используются инструкции DECLARE, OPEN и CLOSE. Например, каждый раз, когда вы открываете курсор, сервер потребляет ресурсы памяти. Если вы будете забывать закрывать курсоры, вы можете создать проблемы для системы управления памятью. Каждый объявленный и открытый курсор должен быть в конечном счете обязательно закрыт.

Курсоры также часто используются в хранимых процедурах или пакетах процедурного кода. Причина состоит в том, что иногда приходится выполнять действия над отдельными строками, а не над наборами данных. Однако, поскольку курсоры работают с отдельными строками, а не с наборами, они гораздо медленнее других способов доступа к данным. Обязательно проведите серьезный анализ своего подхода. Используя вместо курсоров предложений WHERE и JOIN, можно избежать многих проблем, таких, как запутанные операции DELETE и очень сложные инструкции UPDATE.


Инструкция FETCH советы и хитрости DB2

Курсоры DB2 неявно представляют собой курсоры, которые двигаются только вперед и всегда — по одной записи за раз. Курсор DB2, в сравнении со стандартом ANSI, — это, по сути, курсор FETCH NEXT I. Платформа DB2 не поддерживает такие ключевые слова, как PRIOR. ABSOLUTE и RELATIVE. Синтаксис инструкции FETCH в DB2 следующий.

FETCH [FROM] имя_курсора {[INTO переменная! [, …]] | [USING DESCRIPTOR имя_дескриптора]}

Где:

USING DESCRIPTOR имяДескриптора

Указывается ранее созданная область дескриптора (SQL Descriptor Area, SQLDA) с именем имя Дескриптора, которая будет содержать ноль или более значений, полученных инструкцией FETCH.

При сохранении выбранных значений в переменных при помощи предложения INTO система DB2 позволяет вставлять значения LOB в обычные хост-переменные, такие, как VARCHAR (если они достаточно велики, чтобы хранить такое значение), в переменные-локаторы и переменные-файловые ссылки.

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

  • SQLN показывает количество SQLVAR в SQLDA.
  • SQLDABC показывает количество байт хранения, выделенных в SQLDA.
  • SQLD показывает количество переменных, используемых в SQLDA при обработке инструкции. Значение SQLD должно быть больше или равно нулю и меньше или равно SQLN.
  • SQLVAR указывает атрибуты переменных. У дескриптора должно быть достаточно места для хранения всех экземпляров SQLVAR. Для вычисления размера SQLDABS используйте следующую формулу, он должен быть большим или равным 16 + SQLN*(n), где и — это длина SQLVAR.

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

Например, в следующей инструкции FETCH используется SQLDA.

FETCH employee_cursor USING DESCRIPTOR :sqlda2

В приведенном выше примере дескриптор :sqlda2 и курсор employee_cursor должны уже существовать.


Инструкция FETCH советы и хитрости MySQL

Не поддерживается.

Источник