powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / select .. into Ошибка No data found
49 сообщений из 49, показаны все 2 страниц
select .. into Ошибка No data found
    #34690645
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, пожалуйста ...

declare
s varchar2(25) default null;
begin
select c_kod into s from tbl where c_type = 'Такого значения нет в базе';
dbms_output.put_line(s);
end;

На этапе выполнения выдает ошибку No data found. А мне нужно, чтоб если ничего не нашел - вставил в переменную NULL. Почему так не получается?
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34690654
q-q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q-q
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
set serveroutput on

declare 
 s varchar2( 25 ) default null;
begin
 begin
  select dummy into s from dual where dummy = 'Такого значения нет';
 exception
  when no_data_found then 
   s:='null'; -- на самом деле этого делать не нужно
 end;
 dbms_output.put_line('Value of s:'||s);
end;

SQL> set serveroutput on
SQL> 
SQL> declare 
   2    s varchar2( 25 ) default null;
   3   begin
   4    begin
   5     select dummy into s from dual where dummy = 'Такого значения нет';
   6    exception
   7     when no_data_found then 
   8      s:='null'; -- на самом деле этого делать не нужно. достаточно null;
   9    end;
  10    dbms_output.put_line('Value of s:'||s);
  11   end;
  12   /
Value of s:null

PL/SQL procedure successfully completed.
/
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34690656
q-q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q-q
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Или так, если без exception

set serveroutput on

declare 
 s varchar2( 25 ) default 'not null';
begin
  dbms_output.put_line('Value of s:'||s);
  select (select dummy from dual where dummy = 'Такого значения нет') into s from dual ;
 dbms_output.put_line('Value of s:'||s);
end;
/

SQL> declare 
   2    s varchar2( 25 ) default 'not null';
   3   begin
   4     dbms_output.put_line('Value of s:'||s);
   5     select (select dummy from dual where dummy = 'Такого значения нет') into s from dual ;
   6    dbms_output.put_line('Value of s:'||s);
   7   end;
   8   /
Value of s:not null
Value of s:

PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34690676
fox_student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УРА! Спасибо, второй вариант как раз то, что надо!
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34690683
no_data_found
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fox_studentПодскажите, пожалуйста ...

declare
s varchar2(25) default null;
begin
select c_kod into s from tbl where c_type = 'Такого значения нет в базе';
dbms_output.put_line(s);
end;

На этапе выполнения выдает ошибку No data found. А мне нужно, чтоб если ничего не нашел - вставил в переменную NULL. Почему так не получается?

Если для каждого c_type существует единственное значение c_kod, то можно использывать какую-нибудь функцию агрегации min,max ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare 
 s varchar2( 25 ) default null;
begin
 select max(c_kod) into s from tbl where c_type = 'Такого значения нет в базе';
 dbms_output.put_line(s);
end;

...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34690804
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q-q
Код: plaintext
1.
2.
 then 
   s:='null'; -- на самом деле этого делать не нужно

А по-моему нужно... :)
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34690854
q-q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q-q
Гость
andrey_anonymous q-q
Код: plaintext
1.
2.
 then 
   s:='null'; -- на самом деле этого делать не нужно

А по-моему нужно... :)


авторА мне нужно, чтоб если ничего не нашел - вставил в переменную NULL

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare 
 s varchar2( 25 ) default null;
begin
 begin
  select dummy into s from dual where dummy = 'Такого значения нет';
 exception
  when no_data_found then 
   null; -- нужно сделать это
 end;
 dbms_output.put_line('Value of s:'||s);
end;
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34690890
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q-q andrey_anonymous q-q
Код: plaintext
1.
2.
 then 
   s:='null'; -- на самом деле этого делать не нужно

А по-моему нужно... :)
авторА мне нужно, чтоб если ничего не нашел - вставил в переменную NULL
Код: plaintext
1.
2.
  when no_data_found then 
   null; -- нужно сделать это

Хотя Вы и не отдаете себе в этом отчета, но значение переменной s в подобном коде в общем случае не определено .
Ваш эксперимент ничего не доказывает, поскольку всего лишь демонстрирует конкретную реализацию конкретной версии конкретной системы и нет никакой гарантии, что завтра на другой системе этот код приведет к тому же результату.
Надежный код должен быть детерминированным и не должен полагаться на побочные эффекты.
Поэтому делать надо все-таки менно так, как Вы показали в первом ответе.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34691272
q-q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q-q
Гость
andrey_anonymous
Хотя Вы и не отдаете себе в этом отчета, но значение переменной s в подобном коде в общем случае не определено .


Мне кажется это вы себе не отдаете отчета. Значение переменной s четко определено:
Код: plaintext
1.
2.
3.
4.
declare 
 s varchar2( 25 ) default null;
begin
...
end;

Никакого изменения поведения в будущем не будет - это только ваши фантазии.

авторПоэтому делать надо все-таки менно так, как Вы показали в первом ответе.
Код: plaintext
1.
2.
3.
4.
5.
   8      s:='null'; -- на самом деле этого делать не нужно. достаточно null;
   9    end;
  10    dbms_output.put_line('Value of s:'||s);
  11   end;
  12   /
Value of s:null
В этом коде слова "этого делать не нужно" означали что не нужно присваивать s:='null', так автору нужно было не это, а это s:=null; Я же присвоил текстовое значение 'null', что-бы при выводе было четко видно какое значение выводится.

Автор же пусть присваивает что хочет.


andrey_anonymous
Хотя Вы и не отдаете себе в этом отчета,


А на вашем месте, я не делал бы выводов о человеке и о его уровне, которого вы не знаете.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34692082
ГостЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
q-q
А на вашем месте, я не делал бы выводов о человеке и о его уровне, которого вы не знаете.
Ты ж сам напросился на выводы, тебе следует немного подумать:)
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34692644
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q-qи о его уровне, которого вы не знаете.
Уважаемый ГостЪ избавил меня от необходимости делать демо, за что ему спасибо.
Что до "уровня", то разумные люди тут его не выясняют. Разумные люди стараются его повышать независимо от регалий или степени "засеренности" ника.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34693689
q-q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q-q
Гость
ГостЪ q-q
А на вашем месте, я не делал бы выводов о человеке и о его уровне, которого вы не знаете.
Ты ж сам напросился на выводы, тебе следует немного подумать:)

Некорректный пример приводите. Там запрос возвращает строки, естественно что значение переменной не будет равно дефолтному. В нашем случае запрос не возвращает строк.

Я бы посоветовал вам не приводить в будущем сомнительные аргументы.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34693710
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q-qТам запрос возвращает строки

Там запрос возвращает EXCEPTION.
Это и есть предмет исследований.
Поэтому вооружитесь собственными рекомендациями и подумайте еще разок.
Удачи.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34693739
q-q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
q-q
Гость
andrey_anonymous q-qТам запрос возвращает строки

Там запрос возвращает EXCEPTION.
Это и есть предмет исследований.
Поэтому вооружитесь собственными рекомендациями и подумайте еще разок.
Удачи.

Еще раз для непонятливых повторяю, в том примере запрос возвращат несколько строк, поэтому возникает исключение. Соответственно переменная принимает какое-то значение. В нашем примере, исключение возникает потому что наоборот запрос не возвращает строк, соответственно переменная не получает никакого значения.

Больше повторять небуду.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #34693762
ГостЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
q-q andrey_anonymous q-qТам запрос возвращает строки

Там запрос возвращает EXCEPTION.
Это и есть предмет исследований.
Поэтому вооружитесь собственными рекомендациями и подумайте еще разок.
Удачи.

Еще раз для непонятливых повторяю, в том примере запрос возвращат несколько строк, поэтому возникает исключение. Соответственно переменная принимает какое-то значение. В нашем примере, исключение возникает потому что наоборот запрос не возвращает строк, соответственно переменная не получает никакого значения.

Больше повторять небуду.

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

P.S. попридержи лошадей, упрямство - добродетель ослов.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
select .. into Ошибка No data found
    #39641423
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри за тысячные грабли, но не поможете с такой штукой? Не работает EXCEPTION, и не могу понять почему :(:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
CLEAR SCREEN
SET SERVEROUTPUT ON
DECLARE
    MyVar   DBA_EXTENTS.BYTES%TYPE;
BEGIN
    IF
        MyVar IS NULL
    THEN
        DBMS_OUTPUT.PUT_LINE('1. MyVar is null');
    ELSE
        DBMS_OUTPUT.PUT_LINE('1. MyVar is not null');
    END IF;

    SELECT
        SUM(BYTES)
    INTO
        MyVar
    FROM
        DBA_EXTENTS
    WHERE
        OWNER = 'XXXX';

    IF
        MyVar IS NULL
    THEN
        DBMS_OUTPUT.PUT_LINE('2. MyVar is null');
    ELSE
        DBMS_OUTPUT.PUT_LINE('2. MyVar is not null');
    END IF;

EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND raised successfully');
END;
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641425
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда выполняют, результат такой:

Код: plsql
1.
2.
3.
4.
5.
1. MyVar is null
2. MyVar is null


PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641427
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему не залетаю в этот блок кода?

Код: plsql
1.
DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND raised successfully');
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641433
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellanПочему не залетаю в этот блок кода?

Код: plsql
1.
DBMS_OUTPUT.PUT_LINE('NO_DATA_FOUND raised successfully');

RTFM Aggregate Functions (FAQ)
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641434
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Агрегирующая функция sum() для пустого множества данных, возвращает null, а не пустое множество.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641439
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, а тогда какое из предопределенных исключений https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm#LNPLS00703 подойдет к моему случаю?
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641445
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellanподойдет к моему случаю? http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641446
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellanХорошо, а тогда какое из предопределенных исключений https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm#LNPLS00703 подойдет к моему случаю?


EXCEPTION - нестандартная обработка программного исключения (ошибки)
У тебя ошибки нет

Что ты хочешь от программы?
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641448
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellanХорошо, а тогда какое из предопределенных исключений https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm#LNPLS00703 подойдет к моему случаю?

Если нужно именно это исключение, то добавь having к запросу
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641449
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дальше по ходу программы, если не контролировать значение MyVar, натыкаюсь на такую ошибку:

Код: plsql
1.
2.
3.
4.
5.
6.
Error report -
ORA-01403: данные не найдены
ORA-06512: на  line 51
01403. 00000 -  "no data found"
*Cause:    No data was found from the objects.
*Action:   There was no data from the objects which may be due to end of fetch.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641455
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас я пытаюсь это контролировать конструкцией вида:

Код: plsql
1.
If MyVar IS NOT NULL...

,

но зачем (изобретать велосипед?), если в базе и так предусмотрены штатные средства обработки исключений?
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641457
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellanДальше по ходу программы, если не контролировать значение MyVar, натыкаюсь на такую ошибкуПоменяй местами "дальше" и "раньше".
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641458
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или я путаю теплое с мягким?

Просто... Когда я этот запрос выполняю в SQL Developer, он не возвращает мне результат, из чего я и сделал вывод, что результат запроса - null.

Простите за детские ошибки, если я допускаю таковые.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641469
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fox_student,

Можно обойтись без исключений. Например так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
DECLARE S VARCHAR2(25);
BEGIN
  FOR X IN (SELECT C_LOD FROM TBL WHERE C_TYPE = 'Такого значения нет в базе') LOOP
    S := X.DEV_NAME; -- ЗНАЧЕНИЕ БУДЕТ ТОЛЬКО ЕСЛИ ОНО ЕСТЬ
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('S = '||S);
END;
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641474
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellan,
Попутал автора
Щас, с этим погляжу если успею.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641478
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БельфяАгрегирующая функция sum() для пустого множества данных, возвращает null, а не пустое множество.

А пустое множество отличается от null? А как оно обозначается? И как мне проверить, что у меня результат запроса - пустое множество, а не null?
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641484
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellanА пустое множество отличается от null? А как оно обозначается? И как мне проверить, что у меня результат запроса - пустое множество, а не null?Неправильные вопросы порождают неправильные ответы. Напиши конкретно, чего ты хочешь получить запросом, распиши подробнее. Тебе (возможно) подскажут как написать правильно. А с вопросами по теории - к гуглу, они элементарны...
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641570
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellan,
Вы бы конкретно сказали что хотите, это тестовый код - а что реально вас интересует?
В вашем коде MyVar всегда NULL.
Вы хотите обязательно исключение или таки что-то реальное?
Исключение - это крайний случай.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641578
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stells2Исключение - это крайний случай.
Чойта крайний-то?
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641593
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stells2GrayMagellan,
Вы бы конкретно сказали что хотите, это тестовый код - а что реально вас интересует?
В вашем коде MyVar всегда NULL.
Вы хотите обязательно исключение или таки что-то реальное?
Исключение - это крайний случай.

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

Но что касается теста - всё-таки интересно, почему я не залетаю в исключение. Ведь нет разницы, что было в переменной до выполнения запроса - null или не null. По идее на момент выполнения запроса в переменную помещается null (или пустое множество, которое наверное затем все равно в null преобразуется), и это должно вызывать исключение в этом блоке.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641595
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне тогда хочется понять - а при каких условиях взводится NO_DATA_FOUND?
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641600
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellan,
попробуйте примерно так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DECLARE
    MyVar   DBA_EXTENTS.BYTES%TYPE;
    S VARCHAR2(256);
BEGIN
    S := '1. MyVar IS ' || MyVar;
    SELECT SUM(BYTES) INTO  MyVar FROM  DBA_EXTENTS WHERE OWNER = 'XXXX';
    S := S||' '||'2. SUM(BYTES) = '|| MyVar;
    SELECT NVL(SUM(BYTES),1) INTO  MyVar FROM  DBA_EXTENTS WHERE OWNER = 'XXXX';
    S := S||' '||'3. NVL(SUM(BYTES),1) = '|| MyVar;
    FOR X IN (SELECT BYTES  FROM  DBA_EXTENTS WHERE OWNER = 'XXXX') LOOP
       MyVar := X.BYTES;
       S := S||' СМОГЛИ ВЫБРАТЬ ХОТЬ ОДНУ СТРОКУ X.BYTES ='||MyVar;
    END LOOP;
    SELECT BYTES INTO  MyVar FROM  DBA_EXTENTS WHERE OWNER = 'XXXX';
    S:= S||' '||'4. SELECT BYTES =  '|| MyVar;
    DBMS_OUTPUT.PUT_LINE('S = '||S||'-> НОРМАЛЬНОЕ ЗАВЕРШЕНИЕ');
EXCEPTION  WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('S = '||S||'->'||SQLERRM);
END;
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641602
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе уже ответили, что исключение возникнет тогда, когда не будет строк в результате запроса, у тебя же применена агрегирующая функция, с которой результат будет хотя бы с одной строкой, в данном случае с null. Having спасет.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641603
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellanНо мне его вам стыдно показывать - он наверняка вам покажется ламерским.
А это вот зря, вы же что-то делаете, а не просите это сделать других. Это нормально, не стесняйтесь.
GrayMagellanНо что касается теста - всё-таки интересно, почему я не залетаю в исключение. Ведь нет разницы, что было в переменной до выполнения запроса - null или не null.

Вы не правильно интерпретируете поведение программы.
Попробуйте выполнить что я дал выше. Есть подозрение, что вы не зайдете в цикл.
Вот эти и отличается NULL от того, чего нет вообще.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641605
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellanМне тогда хочется понять - а при каких условиях взводится NO_DATA_FOUND?
Это исключение поднимается в случае применения кляузы INTO (select into, fetch into), когда курсор не вернул ни одной записи.
Если в этих же условиях курсор вернет более одной записи - поднимется too_many_rows.

Первое предназначено для отработки ситуации, когда в результате отсутствия данных переменные-приемники записи не инициализированы. Не надо путать с NULL.
Второе - для фиксации ситуации, когда логика приложения находится в противоречии с содержимым БД (нарушение целостности данных либо, что чаще, недостатки логики приложения)
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641608
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__vvp_,

простите, но как оно может что-то агрегировать, если в dba_extents нет строк с табличным пространством, имя которому 'ХХХХ'. Что агрегировать, если такого табличного пространства нет? а, я понял. вы думаете что это я подменил реальное имя на XXXX. Нет, в тексте тестового запроса так и написано. Это раз. А во-вторых, если бы запрос давал результат хотя бы с одной строкой, то SQL Developer мне бы и выдал эту самую одну строку как результат выполнения запроса? Но он ничего не возвращает!
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641609
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stells2,

выполнил. Выдало вот что:

Код: plsql
1.
S = 1. MyVar IS  2. SUM(BYTES) =  3. NVL(SUM(BYTES),1) = 1->ORA-01403: данные не найдены
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641614
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellan,

Попробуй

Select sum(1), count(*)
From dual
Where 1=2
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641615
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GrayMagellan__vvp_,

простите, но как оно может что-то агрегировать, если в dba_extents нет строк с табличным пространством, имя которому 'ХХХХ'. Что агрегировать, если такого табличного пространства нет? а, я понял. вы думаете что это я подменил реальное имя на XXXX. Нет, в тексте тестового запроса так и написано. Это раз. А во-вторых, если бы запрос давал результат хотя бы с одной строкой, то SQL Developer мне бы и выдал эту самую одну строку как результат выполнения запроса? Но он ничего не возвращает!

Простите, возвращает :(.

1 строка с null.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641619
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellan__vvp_,

простите, но как оно может что-то агрегировать, если в dba_extents нет строк
Так и может.
Сколько строк? Ноль:

Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select count(*) from dual where 1=2;
select count(*) from dual where 1=2;

  COUNT(*)
----------
         0


Однако:
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select count(*) from dual where 1=2 group by dummy;
select count(*) from dual where 1=2 group by dummy;

  COUNT(*)
---------- --строк НЕ вернул
SQL> 
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641621
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается, что данные есть...

1 строка со значением NULL...

Тогда да, исключение NO_DATA_FOUND срабатывать не должно, т.к. в результате выполнения у меня получается 1 строка. Гм... Её значение равно NULL, помещается в MyVar, затирая предыдущее (я пытался делать
Код: plsql
1.
MyVar   DBA_EXTENTS.BYTES%TYPE DEFAULT 0;

, и тогда мне база выдавала мне 1. MyVar is not null 2. MyVar is null), после чего я попадаю на сообщение 2. MyVar is null. Все понятно. Да, надо тогда использовать
Код: plsql
1.
IF MyVar IS NULL

для контроля результатов выполнения запроса.

Спасибо большое за разъяснения. Прошу прощения за мою тупливость.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641622
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellan,
Ну вот, Вы сами все увидели на практике.
Ошибка выпала, когда не было ни одной строки , вообще ничего. Вот это ничего и не может вставить хоть что-то. Т.е. дело не в NULL а в том, что нечему просто вставку делать.
т.е. в цикл мы не зашли, и тем самым обошли исключение отсутствия записи. А вот на 4 шаге напоролись, на исключение.

Если вам важно обойти исключение, т.е. корректно отработать - то код выше, который я адресовал по ошибке fox_student.
Эта комбинация позволяет ровно и предсказуемо запрограммировать логику.
Если Вам надо именно исключения отлавливать (например, писать в лог), то пример выше и документация, думаю помогут.
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641623
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrayMagellan,

Отчего же не использовать исключение? Все же уже разжевали. Осталось только заставить запрос не возвращать строк )
...
Рейтинг: 0 / 0
select .. into Ошибка No data found
    #39641626
GrayMagellan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо вам всем за разъяснения! Сейчас мне понятно стало все.
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / select .. into Ошибка No data found
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]