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

Атрибуты неявного курсора возвращают информацию относительно выполнения операторов INSERT, UPDATE, DELETE или SELECT INTO. Значения атрибутов курсора всегда ссылаются на последнее выполненное утверждение SQL. Прежде, чем Oracle открывает курсор SQL, атрибуты неявного курсора производят NULL.

 

 %FOUND

 

Пока оператор манипулирования данными SQL выполняется, %FOUND производит NULL. После, если %FOUND производит TRUE, то одно из утверждений INSERT, UPDATE или DELETE повлияло на одну или несколько строк или утверждение SELECT INTO возвратило одну или несколько строк. Иначе, %FOUND производит FALSE. В следующем примере %FOUND используется для вставки строки, если удаление прошло успешно:  

 

DELETE FROM emp WHERE empno = my_empno;

IF SQL%FOUND THEN  -- успешное удаление

   INSERT INTO new_emp VALUES (my_empno, my_ename, ...);

   ...

END IF;

 

 %ISOPEN

 

Oracle закрывает курсор SQL автоматически после выполнения соответствующего утверждения SQL. В результате, %ISOPEN всегда производит FALSE.  

 

 %NOTFOUND

 

%NOTFOUND логическая противоположность %FOUND. %NOTFOUND производит TRUE если ни одно из утверждений INSERT, UPDATE или DELETE не повлияло ни на одну строку, или если утверждение SELECT INTO не возвратило ни одной строки. Иначе, %NOTFOUND производит FALSE. В данном примере %NOTFOUND используется для вставки новой строки, если обновление не произошло:  

 

UPDATE emp SET sal = sal * 1.05 WHERE empno = my_empno;

IF SQL%NOTFOUND THEN  -- не обновилось

   INSERT INTO errors VALUES (...);

END IF;

 

 %ROWCOUNT

 

%ROWCOUNT производит количество строк изменённых утверждениями INSERT, UPDATE или DELETE или возвращённых утверждением SELECT INTO. %ROWCOUNT производит 0, если ни одно из утверждений INSERT, UPDATE или DELETE не повлияло ни на одну строку или утверждение SELECT INTO не возвратило ни одной строки. В следующем примере %ROWCOUNT используется для выполнения действия, если было удалено более десяти строк: