У меня возникли некоторые проблемы с моей хранимой процедуры в Oracle 12.1хранимая процедура два исключения выберите заявления
Код удар получает ошибку, и я думаю, что он должен делать с помощью двух заявлений Exception подряд?
Я создал хранимую процедуру для поддельной небольшой онлайн-компании DVD, которая обновляет позицию очереди в таблице очереди аренды. Я использую оператор IF, который говорит, если член уже имеет этот DVD в очереди, а затем обновляет позицию очереди. Чтобы проверить, имеет ли член уже DVD в очереди, я пишу инструкцию SQL Select, которая проверяет наличие DVD в очереди участников. Если оператор находит DVD, он вставляет его в «dvd_check». Если DVD не найден, тогда я устанавливаю DVD_check равным 0.
У меня также есть второй оператор SQL, чтобы определить исходный порядок очередей строки, которая будет обновляться. Оба утверждения отлично работают сами по себе в хранимой процедуре, но когда я складываю их вместе в StoredProcedure перед моим оператором IF, я получаю сообщение об ошибке:
Ошибка (17,5): PLS-00103: Встречался символ " ИСКЛЮЧЕНИЕ "при ожидании одного из следующего: (начальный случай объявляет конечный выход для goto, если loop mod null ... AND
Ошибка (29,4): PLS-00103: Обнаружен символ« конец файла » "когда ожидается одно из следующих действий: конца не Pragma окончательного переопределения инстанциируемого порядка статические ...
Вот мой код:
CREATE OR REPLACE PROCEDURE sp_queueorder (
dvdid_sp number,
memberid_sp number,
queueposition_sp number)
IS
dvd_check number;
old_queueposition number;
BEGIN
SELECT dvdid INTO dvd_check FROM rentalqueue
WHERE DVDid = dvdid_sp and memberid = memberid_sp;
EXCEPTION
WHEN no_data_found THEN dvd_check := 0;
SELECT queueposition INTO old_queueposition FROM rentalqueue
WHERE DVDid = dvdid_sp and memberid = memberid_sp;
EXCEPTION
WHEN no_data_found THEN old_queueposition := 0;
IF dvd_check > 0 THEN
UPDATE rentalqueue SET queueposition = queueposition + 1
WHERE memberid = memberid_sp and queueposition >= queueposition_sp AND queueposition <= old_queueposition;
UPDATE rentalqueue SET queueposition = queueposition_sp
WHERE dvdid = dvdid_sp AND memberid = memberid_sp;
END IF;
END;
Большое спасибо за помощь в решении этой проблемы.