powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / select .. into Ошибка No data found
25 сообщений из 49, страница 1 из 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
25 сообщений из 49, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / select .. into Ошибка No data found
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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