Правильная ссылка на эту страницу
http://az-design.ru/Support/DataBase/SQL/SQL92/SQL92-2Fetch.shtml

FETCH
Извлекает строку из открытого курсора

Синтаксис

FETCH [[orientation] FROM]
      имя курсора INTO целевая спецификация .,..;
orientation ::=
    NEXT|PRIOR|FIRST|LAST|
   {ABSOLUTE|RELATIVE спецификация значения}

Использование
       Этот оператор извлекает значения из одной строки курсора в список целевых спецификаций (возвращаемых переменных), при этом в первую переменную записывается первый столбец курсора, во вторую — второй и т.д. Оператор FETCH должен всегда следовать после операторов, которые создают (DECLARE CURSOR или ALLOCATE CURSOR) и открывают (OPEN CURSOR) курсор.
       Не следует забывать, что, независимо от того, кому они принадлежат, базовой таблице или представлению, строки располагаются в курсоре согласно порядку их определения, а этот порядок может быть неопределенным (случайным). В любой момент после открытия курсор указывает на какую-либо позицию среди выбранных строк, или на позицию перед первой строкой, или на точку после последней строки. При первом открытии курсор устанавливается перед
первой строкой. Оператор FETCH изменяет положение курсора, затем копирует значения из строки, куда (в список целевых спецификаций) был перемещен курсор. Поскольку оператор содержит функцию перемещения курсора, значит с его помощью можно определить текущее положение курсора относительно набора строк. Следовательно можно использовать этот оператор вместе с операторами DELETE или UPDATE, которым требуется информация о положении курсора, чтобы вносить изменения в его содержимое (предполагается, что речь идет об обновляемом курсоре, см. оператор DECLARE CURSOR) и, таким образом, в связанную с ним таблицу.
       Переменная orientation определяет положение курсора. Спецификация значения — это переменная типа EXACT NUMERIC, изменяющаяся от нуля до назначенного целого и обозначенная как литерал, переменная или параметр соответствующего типа. Функции значений переменной orientation определены следующим образом:

       • Если курсор расположен перед первой строкой, то значение NEXT вызывает перемещение курсора на первую строку. Если курсор расположен на какой-либо другой строке, то он перемещается на следующую. Если курсор расположен после последней строки, то NEXT инициирует условный код "no-data" (нет данных) (пояснение этого кода приведено в конце описания оператора).
       • Если курсор расположен после последней строки, то значение PRIOR вызывает перемещение курсора на эту (последнюю) строку. Если курсор расположен на какой-либо другой, кроме первой, строке, то он перемещается на предыдущую. Если курсор расположен на первой строке или перед ней, то PRIOR инициирует условный код "no-data" (нет данных).
       • Значение FIRST вызывает перемещение курсора на первую строку.
       • Значение LAST вызывает перемещение курсора на последнюю строку.
       • Значение ABSOLUTE N вызывает перемещение курсора на N-ю строку. Если N больше общего количества строк, то инициируется условный код "no-data" (нет данных).
       • Значение RELATIVE N вызывает перемещение курсора на N строк вперед, если аргумент N положителен и на N строк назад, если N — отрицательное число. Если при этом курсор оказывается выше первой или ниже последней строки, то инициируется условный код "no-data" (нет данных)

       Значение NEXT является значением по умолчанию, если положение курсора не определено, и, в любом случае, единственной возможностью его определения, если только этот курсор не был объявлен как SCROLL (см. оператор DECLARE CURSOR). Параметр SCROLL (курсор пролистывания) может указываться только для курсоров, определенных "только для чтения".
       Условный код "no-data" (нет данных) означает, что в данной позиции курсора нет строк, из которых следует извлекать данные. Этот код инициирует предупреждающее сообщение, которое соответствует условию NOT FOUND (см. приложение F), и целевые спецификации состояния курсора не записываются. Так как извлечение
строк происходит до тех пор, пока они не исчерпаны, нет необходимости анализировать эту ошибку. Извлечение из пустого курсора также приводит к появлению кода "no-data". При возникновении этого кода положение курсора определяется следующим образом:

       • Если последний FETCH определен как NEXT (что принято по умолчанию) или LAST, или RELATIVE, или ABSOLUTE используют слишком большие числовые аргументы, то курсор находится ниже последней строки.
       • Во всех остальных случаях курсор расположен перед первой строкой.

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

Пример
       Приведенный ниже оператор перемещает курсор "Paris__Sales" на три строки назад и считывает данные в список целевой спецификации. Предполагается, что курсор "Paris_Sales" является пролистываемым.

FETCH RELATIVE -3
    FROM Paris_Sales
    INTO :name, :id_num, :num_of_clients;

Уровни соответствия

Entry   В реализациях этого уровня не требуется поддержки направлений (где эффективно используется значение NEXT) или применения ключевого слова FROM. Также, эти приложения требуют, чтобы значения столбцов типа EXACT NUMERIC извлекались только в переменные типа EXACT NUMERIC.

См. также
       главу II операторы ALLOCATE CURSOR, CLOSE CURSOR, DECLARE CURSOR, OPEN CURSOR.


  Оглавление
Начало раздела
След.>>




Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:55 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/DataBase/SQL/SQL92/SQL92-2Fetch.shtml