Артём Санников

Персональный блог

Мобильная разработка
Менеджеры пакетов
Хостинг провайдер
Смартфоны
› Извлечение данных из курсора в PL/SQL Oracle

Извлечение данных из курсора в PL/SQL Oracle

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

Практический пример

Рассмотрим работу курсора c_vendors. Обратите внимание, что курсор начинается с оператора DECLARE, на этот раз в нём объявляется не только курсор, но и переменные, в которых требуется хранить данные. Эти переменные объявляются очень просто: сначала они именуются, а затем связываются с отдельными столбцами таблицы.

Далее определяется сам курсор c_vendors, а затем он открывается при помощи OPEN. Далее появляется оператор LOOP, который определяет блок циклически повторяющегося кода. Код, который расположен между LOOP и END LOOP, повторно выполняется до тех пор, пока не возникнет условие, вынуждающее выйти из цикла.

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

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

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

В нашем примере оператор EXIT WHEN c_vendors%notfound; расположен в конце цикла, указывая Oracle выйти из цикла, когда курсор c_vendors возвратит состояние notfound, указывающее на то, что извлекаемых строк больше не осталось.

DECLARE 
    - Объявление переменных
    v_vend_id vendors.vend_id%TYPE;
    v_vend_name vendors.vend_name%TYPE;
    v_vend_address vendors.vend_address%TYPE;

    -- Объявление курсора
    CURSOR c_vendors IS
        SELECT vend_id, vend_name, vend_address
        FROM vendors;

BEGIN

    -- Открываем курсор
    OPEN c_vendors;

    - Перебираем курсор в цикле
    LOOP

    -- Получаем строку
    FETCH c_vendors INTO
        v_vend_id, v_vend_name, v_vend_address

    -- Выходим из цикла, если извлекаемых строк больше не осталось
    EXIT WHEN c_vendors%notfound;

    END LOOP;

    - Закрываем курсор
    CLOSE c_vendors;

END;

Метки: , .

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

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

Реклама от Google
Реклама от Google