- •Основы языка pl/sql
- •Основные синтаксические конструкции языка pl/sql
- •V_ename emp.Ename%type;
- •V_sal number;
- •Курсоры pl/sql
- •V_ename emp.Ename%type;
- •V_sal emp.Sal%type;
- •If sql%notfoundthen
- •Insert into tb_error_log(id,date)
- •Values (user_id, sysdate);
- •V_account_no number;
- •V_balance number;
- •I.Until_price,
- •I.Quantity
- •Управление ходом выполнения кода pl/sql
- •If условие then операторы;
- •V_ename emp.Ename%type;
- •V_sal emp.Sal%type;
- •If c_emp%found then
- •Обработка ошибок (исключений - exception)
- •V_oraerr number;
- •V_oraerrm varchar2(255);
- •V_sal number;
Обработка ошибок (исключений - exception)
Синтаксическая структура блока исключений
DECLARE
объявление переменных;
BEGIN
операторы;
EXCEPTION
WHEN исключение [OR исключение …] THEN
операторы;
[WHEN …]
[WHEN OTHERS THEN
операторы;]
END;
Типов исключений в Oracleопределено очень много (например,NO_DATA_FOUND илиINSERT_FAILURE), но вы можете вводить свои типы в блокеDECLAREиспользуя тип «EXCEPTION».
Пример.
DECLARE
e_end_rows EXCEPTION;
V_oraerr number;
V_oraerrm varchar2(255);
V_sal number;
CURSOR deptl0_enp_cursor IS
SELECT deptno, ename, sal
FROM еmр ORDER BY deptno;
BEGIN
v_sal :=0
FOR emp_record IN deptl0_emp_cursor LOOP
IF emp_record.deptno > 10 THEN raise e_end_rows;
v_sal := v_sal + sal;
END LOOP;
EXCEPTION
WHEN e_end_rowsTHEN
DBMS_OUTPUT.PUT_LINE('Dept 10 Salaries: ' ||
TO_CHAR(v_sal));
WHEN NO_DATA_FOUNDTHEN
DBMS_OUTPUT.PUT_LINE('No Employees Found') ;
WHEN OTHERSTHEN
v_oraerr := SQLCODE;
v_oraerrm := SQLERRM;
DBMS_OUTPUT.PUT_LINE('OraErr: ' || v_oraerr ||
' ' || v_oraerrm);
END;
Функции SQLCODEиSQLERRMвозвращают номер ошибки и сообщение об ошибкеOracle.
Функция DBMS_OUTPUT.PUT_LINEвыводит текстовую строку.
Оператор RAISEявно активизирует исключение.
Контрольные вопросы
Что является необязательным для функции (может быть, а может и не быть):
Секция заголовка
Секция определений
Секция выполняемых операторов
Секция исключений
Признак конца – оператор END
Что является необязательным для анонимной процедуры (может быть, а может и не быть):
Секция заголовка
Секция определений
Секция выполняемых операторов
Секция исключений
Признак конца – оператор END
Курсор – это:
Временная рабочая область памяти для PL/SQL
Рабочая область для операторов SQL, возвращающих более одной строки
Рабочая область и область хранения для PL/SQL
Выполняемый модуль кода
Процедуры отличаются от функций тем, что:
Процедуры имеют только выходные параметры, но не входные
Процедуры имеют входные параметры, а функции – нет
Функции имеют выходные параметры, а процедуры – нет
Функции могут иметь входные параметры, а процедуры – нет
Имя переменных PL/SQLдолжно быть уникальным в блокеPL/SQL
ДА/НЕТ
В чём состоит разница между неявными курсорами и явными курсорами?
Явные курсоры обрабатывают только одну строку, а неявные – много строк
Явные курсоры применяются только для операторов DML
Неявные курсоры применяются только для операторов DML
Неявные курсоры позволяют обрабатывать только одну возвращенную строку, а явные – несколько строк
Оператор IFв действительности не требует примененияENDIF
ДА/НЕТ
Какие утверждения являются верными?
Простое CASE-выражение можно заменитьCASE-инструкцией.
Поисковое CASE-выражение можно заменитьCASE-инструкцией.
CASE-инструкцию можно заменить простымCASE-выражением.
CASE-инструкцию можно заменить поисковымCASE-выражением.
Если ошибочная ситуация не обработана в блоке PL/SQL, то она
Игнорируется
Распространяется на вызывающую программу
Вызывает ошибку в блоке PL/SQL
Обрабатывается в соответствии с правилами, применяемыми в языке PL/SQLпо умолчанию
Условие блока обработки ошибок WHEN_OTHERSможет применяться в блокеEXCEPTIONS:
Как первое условие
Как последнее условие
В любом месте, порядок расположения условий не имеет значения