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

Инструкция FETCH общие правила

На самом общем уровне курсор должен быть:

  • создан при помощи инструкции DECLARE;
  • открыт при помощи инструкции OPEN;
  • работа с ним должна вестись при помощи инструкции FETCH;
  • закрыт при помощи инструкции CLOSE.
  • Выполняя эти шаги, вы можете создать результирующий набор данных, сходный с результатом работы инструкции SELECT, за исключением того, что вы можете работать с каждой строкой результирующего набора отдельно. Предположим, например, что вы создали и открыли в базе данных DB2 курсор с именем employee_cursor, который содержит три столбца.

    DECLARE employee_cursor CURSOR FOR SELECT lname, fname, emp_id FROM employee

    WHERE hire_date >= ‘2005-02-15’; OPEN employee_cursor;

    Теперь вы можете извлекать значения из курсора при помощи инструкции FETCH.

    FETCH FROM employee_cursor

    INTO ;emp_last_name, ;emp_first_name, :emp_id

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

    У каждой платформы есть свои собственные правила относительно того, как используются переменные. Например, в DB2 в качестве префикса имени переменной используется двоеточие, как это показано в приведенном выше примере. Система SQL Server требует использовать знак @, а в Post-greSQL и Oracle нет префиксов и тому подобное. Однако в стандарте SQL говорится, что префикс в виде двоеточия необходим для встроенных языков, таких, как С и COBOL, хотя для процедурного SQL префикс не требуется.

    Курсор находится либо прямо на строке, либо перед первой строкой, либо после последней. Если курсор располагается на строке, эта строка называется текущей строкой. Вы можете использовать курсоры для указания положения текущей строки для инструкции UPDATE или DELETE с помощью предложения WHERE CURRENT ROW.

    Важно помнить, что результирующий набор курсора не является циркулическим. То есть, если у вас есть результирующий набор данных, состоящий из 10 записей, и вы указываете курсору передвинуться вперед на 12 записей, это не означает, что курсор снова вернется к началу и начнет отсчитывать записи оттуда. По умолчанию курсор остановится после последней записи, если он двигался вперед, или перед первой записью, если двигался назад. Например, в SQL Server:

    FETCH RELATIVE 12 FROM employee_cursor

    INTO @emp_last_name, @>emp_first_name, @>emp_id

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

    FETCH PRIOR FROM employee_cursor INTO @emp_last_name, @>emp_id

    Предыдущий пример не будет выполнен, поскольку employee_cursor содержит три столбца, а операция выборки — только две переменные.

    Источник