FETCH c_sal INTO v_sname, v_comm;
Теперь данные, хранящиеся в первой выбранной из БД строке, перенесены в переменные PL/SQL v_sname, и v_comm., и эти переменные можно использовать в вычислениях, операторах IF … THEN … ELSE и т.п. Когда потребуется выбрать следующую строку, нужно снова выдать оператор FETCH. В завершение работы с курсором его закрывают командой CLOSE:
CLOSE c_sal;
Приведем пример программы, выбирающей с помощью курсора две сроки данных и выводящих их содержимое на экран.
DECLARE
SELECT sname, comm FROM sal WHERE city = ‘London’;
v_sname sal.sname%TYPE;
v_comm sal.comm%TYPE;
BEGIN
FETCH c_sal INTO v_sname, v_comm;
DBMS_OUTPUT.PUT_LINE(‘sname=’|| sname’ v_comm=’|| v_comm);
FETCH c_sal INTO v_sname, v_comm;
DBMS_OUTPUT.PUT_LINE(‘sname=’|| sname’ v_comm=’|| v_comm);
END;
/
Заметим, что выборку нескольких строк из курсора можно производить, используя команды циклов. В следующем примере используется цикл FOR для получения того же результата, что и предыдущем примере программы.
DECLARE
SELECT sname, comm FROM sal WHERE city = ‘London’;
v_sname sal.sname%TYPE;
v_comm sal.comm%TYPE;
BEGIN
FOR i IN 1..2 LOOP
FETCH c_sal INTO v_sname, v_comm;
DBMS_OUTPUT.PUT_LINE(‘sname=’|| sname’ v_comm=’|| v_comm);
END LOOP;
END;
/
Обратите внимание, что переменную цикла i в разделе DECLARE определять не требуется – она оператором FOR определяется автоматически.
8.2.2. Курсорные атрибуты
Для анализа необходимости и успешности выполнения этого этапа существуют четыре встроенные переменные:
%ISOPEN
%FOUND
%NOTFOUND
%ROWCOUNT
Первые три атрибута являются булевскими и могут принимать значения TRUE, FALSE или NULL. Атрибут %ISOPEN показывает, открыт курсор или нет. Атрибут %FOUND показывает, прочитана ли строка из курсора после выполнения команды FETCH. Если %FOUND имеет значение FALSE, то строка не прочитана, и это означает, что в курсоре строк больше нет (все уже выбрано или вообще не было ни одной строки). Атрибут %NOTFOUND является противоположным по смыслу атрибуту %FOUND и введен для удобства.
Атрибут %ROWCOUNT является целочисленным – это счетчик количества прочитанных строк из курсора.
Примеры применения атрибутов показаны в разделе 8.2.3.
8.2.3. Параметрыкурсора
Курсоры могут иметь параметры, что придает большую гибкость их применению. Параметры должны быть скалярными величинами. В следующем примере показано использование такого курсора.
DECLARE
CURSOR c_cust(p_city VARCHAR2) IS
SELECT * FROM cust WHERE city=p_city;
v_cust c_cust%ROWTYPE;
v_city c_cust%TYPE;
BEGIN
v_city := 'London';
OPEN c_cust(v_city);
LOOP
FETCH c_cust INTO v_cust;
EXIT WHEN (c_cust%NOTFOUND);
DBMS_OUTPUT.PUT_LINE(v_cust.cname||' has '||v_cust.rating);
END LOOP;
IF (c_cust%ISOPEN) THEN CLOSE c_cust;
END;
/
Обратите внимание на то, что при задании типа параметра не указывается размер.
Поскольку курсоры предназначены для работы с запросами, возвращающими множество строк, они обрабатываются в программе почти всегда с помощью циклов. В предыдущем примере продемонстрировано использование простого цикла LOOP. Для упрощения операций установки и обработки курсоров в программах PL/SQL можно использовать специальный курсорный цикл FOR
8.2.4. Курсорный цикл FOR
Курсорный цикл FOR автоматически объявляет переменную или запись, куда можно будет считывать строки курсора. В нем также автоматически открывается курсор, а по завершении цикла курсор закрывается. Такой цикл будет пройден столько раз, сколько строк имеется в запросе, определенном в курсоре. В блоке PL/SQL данный цикл может быть определен следующим образом:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.