Введение в СУБД "Oracle". Космачев В.М - 60 стр.

UptoLike

ГУАП МЦИТ
Введение в «ORACLE»
Под ред. проф. В.М.Космачёва
60
при использовании (select_expr) объявлять курсортак же не следует
частое использовании (select_expr) снижает читабельность реальной программы
В следующем примере курсорный цикл FOR неявно объявляет запись emp_rec как принадлежащую типу
c1%ROWTYPE:
DECLARE
CURSOR c1 IS SELECT ename, sal, hiredate, deptno FROM emp;
BEGIN
FOR emp_rec IN c1 LOOP salary_total := salary_total + emp_rec.sal; END LOOP;
END;
Упражнения
2. С учетом сказанного, создать новый вариант программы выборки строк таблицы LECTURE с использованием
курсоров, лишенный указанных выше недостатков. (Применить циклы LOOP и WHILE LOOP )
3. Применить цикл FOR LOOP с явным объявлением кусора
4. Применить цикл FOR LOOP с подзапросом (SELECT)
2.3.7. Обработка исключительных ситуаций
Большинство развитых языков программирования обладает встроенными механизмами обработки
исключительных ситуаций. Соответствующие языковые средства предусмотрены и в PL/SQL. При возникновении в
системе предопределенной или описанной пользователем ситуации происходит автоматическая передача управления
в нужный фрагмент блока EXCEPTION программы на PL/SQL, где и происходит предусмотренная обработка
возникшей исключительной ситуации.
Некоторые предопределенные исключительные ситуации PL/SQL представлены в таблице 2.7. Полный перечень
исключительных ситуаций может быть найден в руководстве по языку PL/SQL.
Таблица 2.7. Некоторые исключительные ситуации
Имя исключительной
ситуации
Описание предопределенной исключительной ситуации
LOGIN_DENIED
Неуспешное подключение к серверу (например, введен неверный пароль)
NOT_LOGGED_ON
Попытка выполнить действие без подключения к серверу ORACLE
INVALID_CURSOR
Ссылка на недопустимый курсор или недопустимая операция с курсором
NO_DATA_FOUND
Не найдены данные, соответствующие оператору SELECT INTO
DUP_VAL_ON_INDEX
Попытка вставить значение-дубликат в столбец с ограничением на уникальность
значения
TOO_MANY_ROWS
Оператор SELECT INTO возвращает более одной строки в переменную
VALUE_ERROR
Арифметическая ошибка, ошибка преобразования или усечения
TIMEOUT_ON_RESOURCE
Блокировка по времени при ожидании ресурса
ZERO_DIVIDE
Деление на ноль
INVALID_NUMBER
Неудачная попытка преобразования к типу NUMBER
STORAGE_ERROR
Внутренняя ошибка языка, устанавливается, если PL/SQL недостаточно памяти