Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / select .. into Ошибка No data found / 25 сообщений из 49, страница 1 из 2
28.07.2007, 14:24
    #34690645
fox_student
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
Подскажите, пожалуйста ...

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
28.07.2007, 14:36
    #34690654
q-q
q-q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
Код: 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
28.07.2007, 14:39
    #34690656
q-q
q-q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
Код: 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
28.07.2007, 15:24
    #34690676
fox_student
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
УРА! Спасибо, второй вариант как раз то, что надо!
...
Рейтинг: 0 / 0
28.07.2007, 15:33
    #34690683
no_data_found
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка 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
28.07.2007, 20:08
    #34690804
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
q-q
Код: plaintext
1.
2.
 then 
   s:='null'; -- на самом деле этого делать не нужно

А по-моему нужно... :)
...
Рейтинг: 0 / 0
28.07.2007, 22:39
    #34690854
q-q
q-q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
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
29.07.2007, 00:35
    #34690890
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
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
29.07.2007, 19:54
    #34691272
q-q
q-q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
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
30.07.2007, 11:42
    #34692082
ГостЪ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
q-q
А на вашем месте, я не делал бы выводов о человеке и о его уровне, которого вы не знаете.
Ты ж сам напросился на выводы, тебе следует немного подумать:)
...
Рейтинг: 0 / 0
30.07.2007, 13:51
    #34692644
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
q-qи о его уровне, которого вы не знаете.
Уважаемый ГостЪ избавил меня от необходимости делать демо, за что ему спасибо.
Что до "уровня", то разумные люди тут его не выясняют. Разумные люди стараются его повышать независимо от регалий или степени "засеренности" ника.
...
Рейтинг: 0 / 0
30.07.2007, 17:45
    #34693689
q-q
q-q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
ГостЪ q-q
А на вашем месте, я не делал бы выводов о человеке и о его уровне, которого вы не знаете.
Ты ж сам напросился на выводы, тебе следует немного подумать:)

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

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

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

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

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

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

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

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

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

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

P.S. попридержи лошадей, упрямство - добродетель ослов.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.05.2018, 14:30
    #39641423
GrayMagellan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
Сорри за тысячные грабли, но не поможете с такой штукой? Не работает 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
07.05.2018, 14:32
    #39641425
GrayMagellan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
Когда выполняют, результат такой:

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


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

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

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

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


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

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

Если нужно именно это исключение, то добавь having к запросу
...
Рейтинг: 0 / 0
07.05.2018, 14:56
    #39641449
GrayMagellan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select .. into Ошибка No data found
Дальше по ходу программы, если не контролировать значение 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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / select .. into Ошибка No data found / 25 сообщений из 49, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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