Теория для лабораторной работы №5 - "PL/SQL – курсоры и хранимые процедуры", страница 11

   ...

END LOOP;

 

Ссылка на неоткрытый курсор или курсорную переменную с помощью %NOTFOUND вызывает исключение INVALID_CURSOR.

 

 %ROWCOUNT

 

Когда курсор или курсорная переменная открывается %ROWCOUNT обнуляется. До первой выборки %ROWCOUNT производит 0. Потом он содержит количество выбранных строк. Число увеличивается, если последняя выборка возвратила строку. В следующем примере %ROWCOUNT используется для выполнения действия если более десяти строк было выбрано:  

 

LOOP

   FETCH c1 INTO my_ename, my_deptno;

   IF c1%ROWCOUNT > 10 THEN

      ...

   END IF;

   ...

END LOOP;

 

Если курсор или  курсорная переменная не открыта, ссылаясь на % ROWCOUNT происходит исключение INVALID_CURSOR.

Примеры.

Предположим, что имеется таблица data_table которая содержит данные, собранные из экспериментов лаборатории, и нужно анализировать данные эксперимента 1. В следующем примере, вычисляются результаты и сохраняются в таблице базы данных, именованной temp:

 

-- доступный интерактивно в файле EXAMP5

DECLARE

   Num1 data_table. n1 ТИП %; - Объявим переменные

   Num2 data_table. n2 ТИП %; - имеющий те же самые типы как

   Num3 data_table. n3 ТИП %; - столбцы базы данных

 

   result temp.col1%TYPE;

   CURSOR c1 IS

      SELECT n1, n2, n3 FROM data_table WHERE exper_num = 1;

BEGIN

   OPEN c1;

   LOOP

      FETCH c1 INTO num1, num2, num3;

      EXIT WHEN c1%NOTFOUND;

         - C1 % NOTFOUND условие производит TRUE

         - когда FETCH не находит больше строки

      result := num2/(num1 + num3);

      INSERT INTO temp VALUES (result, NULL, NULL);

   END LOOP;

   CLOSE c1;

   COMMIT;

END;

Атрибуты неявного курсора