NO_DATA_FOUND, SELECT COUNT (*) INTO var и var IS NULL разъяснение о триггерах - PullRequest
0 голосов
/ 21 июня 2011

Я читал, что SELECT, который не получает никаких данных, сгенерирует NO_DATA_FOUND.

Но для моего опыта это не так, потому что я сделал:

SELECT COUNT(*) INTO mylocalvar FROM tbl;

В пустой таблице, и она не запускает исключение NO_DATA_FOUND.

Вместо этого я узнал, что mylocalvar был NULL.
Я ожидал, что это будет = 0, но это было NULL.

Так что, если мне нужно проверить, является ли count(*) 1018 *, мне нужно:

IF mylocalvar IS NULL THEN
  --do stuff 

Это правильно? Кроме того, почему в этом случае NO_DATA_FOUND не применяется?
Могу ли я присвоить mylocalvar значение 0 по умолчанию? Может быть, в объявлении:

DECLARE
   mylocalvar NUMBER := 0;

Так что я могу просто сделать IF mylocalvar = 0 THEN?

Спасибо

1 Ответ

3 голосов
/ 21 июня 2011

Не понимаю, почему ваш запрос вернул бы NULL.Он должен возвращать ровно одну строку, поэтому исключение не генерируется.

Поскольку в вашей таблице нет строк, COUNT(*) равно 0.Это сохраняется в mylocalvar.


Попробуйте следующий код, он выводит
0

DECLARE
  mylocalvar  PLS_INTEGER;
BEGIN
  SELECT COUNT(*)
    INTO mylocalvar
    FROM dual
   WHERE 1 = 2;
  dbms_output.put_line(mylocalvar);
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...