Когда другие, то не работает. Однако первая обработка исключений работает, если название отдела не существует - PullRequest
0 голосов
/ 30 апреля 2020

Я попытался решить эту проблему, добавив, когда другие, но это не похоже на работу. Он работает только в том случае, если название отдела не существует, будет отображаться «Нет ДАННЫХ НАЙДЕНО», но когда имя отдела совпадает, ничего не отображается. Я хочу знать, как я могу решить эту проблему

DECLARE
   dept_id      departments.department_id%TYPE;
   mgr_id       departments.manager_id%TYPE;
BEGIN
   SELECT   department_ID, Manager_ID 
        INTO   dept_id, mgr_id
        FROM   departments
    Where  Department_name = 'IT'; 
  EXCEPTION
  WHEN NO_DATA_FOUND THEN 
    DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');

    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE ('The department ID is: ' || dept_id || 
                 '; Manager ID is: ' || mgr_id);  
                     -- change the value of IT to 'ABC'

END;

Я должен использовать, когда другие для этой проблемы

1 Ответ

1 голос
/ 30 апреля 2020

Данные будут выбраны и будут доступны для использования сразу после оператора выбора. Когда оператор выбора завершается ошибкой, элемент управления переходит к блоку исключения. Пользователь может обработать исключение по желанию. Цель, когда другие должны обработать любое Исключение, которое не было обработано, в основном используется, когда разработчик не имеет никакого контроля и не хочет обрабатывать ЛЮБОЕ исключение. Например, TOO_MANY_ROWS не обрабатывается в коде, но попадает в исключение OTHERS.

 DECLARE
       dept_id      departments.department_id%TYPE;
       mgr_id       departments.manager_id%TYPE;
    BEGIN

       SELECT   department_ID, Manager_ID 
            INTO   dept_id, mgr_id
            FROM   departments
        Where  Department_name = 'IT'; 

     DBMS_OUTPUT.PUT_LINE ('The department ID is: ' || dept_id || 
                     '; Manager ID is: ' || mgr_id);

     IF dept_id IS NOT NULL THEN 
         UPDATE departments
         SET DEPARTMENT_NAME ='ABC'
         WHERE department_ID = dept_id
         AND Manager_ID = mgr_id;
     END IF;

      EXCEPTION
      WHEN NO_DATA_FOUND THEN 
        DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');

        WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE (' In other Error '||SQLERRM||' '||SQLCODE);  
                         -- change the value of IT to 'ABC'

    END;
...