Показывать пользовательское сообщение, если в процедуре [duplicate] не выбрано ни одной строки]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
4
задан Tshepang 20 May 2014 в 20:01
поделиться

3 ответа

Невозможно проверить, возвращает ли курсор записи без его открытия. (см. здесь ). Таким образом, вы можете либо получить быстрый запрос, чтобы увидеть, есть ли записи (например, счетчик),

Или вы можете сделать это следующим образом:

CREATE OR REPLACE PROCEDURE SP_EMPLOYEE_LOOKUP_BY_EMP_ID
(
      IN_USER_ID IN NUMBER, 
      IN_EMPLOYEE_ID NUMBER,
      IN_HC_AS_ON_DATE VARCHAR2,
      emp_cursor OUT SYS_REFCURSOR
) 
IS 

 is_found_rec boolean := false;    

 CURSOR employees IS 
    SELECT  * FROM EMPLOYEE e; 

BEGIN    

 FOR employee IN employees
  LOOP  

    is_found_rec := true;

        // do something  

  END LOOP; 

 if not is_found_rec then 
     // do something else 
 end if;

END;
10
ответ дан A.B.Cade 18 August 2018 в 21:12
поделиться

Мне нравится этот путь:

DECLARE

    CURSOR my_cur
    IS
    SELECT 'a' AS a FROM DUAL WHERE 1=1;

    my_rec my_cur%rowtype;

BEGIN
    OPEN my_cur;
    LOOP

        FETCH my_cur INTO my_rec;

        IF my_cur%NOTFOUND
        THEN
            IF my_cur%ROWCOUNT=0
            THEN
                -- do stuff when cursor empty
                DBMS_OUTPUT.PUT_LINE('NOTFOUND,RC=0' || '_' || my_cur%ROWCOUNT || '_' || my_rec.a);
            END IF;
            EXIT;
        ELSE
                -- do stuff when cursor not empty
            DBMS_OUTPUT.PUT_LINE('FOUND,RC>0' || '_' || my_cur%ROWCOUNT || '_' || my_rec.a);
        END IF;

    END LOOP;
    CLOSE MY_CUR;
END;

Вывод, когда курсор 1 = 1 (не пустой):

FOUND,RC>0_1_a

Вывод, когда курсор 1 = 0 (пустой) :

NOTFOUND,RC=0_0_
1
ответ дан guritaburongo 18 August 2018 в 21:12
поделиться

Я думаю, что это возможно только с FETCH. Попробуйте использовать

if myCursor%found then
// some body
end if;

. Но если кто-то знает другой способ, так меня исправьте.

11
ответ дан Simon Dorociak 18 August 2018 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: