|
|
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Подскажите, пожалуйста ... 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. Почему так не получается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 14:24 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 14:36 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 14:39 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
УРА! Спасибо, второй вариант как раз то, что надо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 15:24 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 15:33 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
q-q Код: plaintext 1. 2. А по-моему нужно... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 20:08 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous q-q Код: plaintext 1. 2. А по-моему нужно... :) авторА мне нужно, чтоб если ничего не нашел - вставил в переменную NULL Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 22:39 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
q-q andrey_anonymous q-q Код: plaintext 1. 2. А по-моему нужно... :) авторА мне нужно, чтоб если ничего не нашел - вставил в переменную NULL Код: plaintext 1. 2. Хотя Вы и не отдаете себе в этом отчета, но значение переменной s в подобном коде в общем случае не определено . Ваш эксперимент ничего не доказывает, поскольку всего лишь демонстрирует конкретную реализацию конкретной версии конкретной системы и нет никакой гарантии, что завтра на другой системе этот код приведет к тому же результату. Надежный код должен быть детерминированным и не должен полагаться на побочные эффекты. Поэтому делать надо все-таки менно так, как Вы показали в первом ответе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2007, 00:35 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous Хотя Вы и не отдаете себе в этом отчета, но значение переменной s в подобном коде в общем случае не определено . Мне кажется это вы себе не отдаете отчета. Значение переменной s четко определено: Код: plaintext 1. 2. 3. 4. Никакого изменения поведения в будущем не будет - это только ваши фантазии. авторПоэтому делать надо все-таки менно так, как Вы показали в первом ответе. Код: plaintext 1. 2. 3. 4. 5. Автор же пусть присваивает что хочет. andrey_anonymous Хотя Вы и не отдаете себе в этом отчета, А на вашем месте, я не делал бы выводов о человеке и о его уровне, которого вы не знаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2007, 19:54 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
q-q А на вашем месте, я не делал бы выводов о человеке и о его уровне, которого вы не знаете. Ты ж сам напросился на выводы, тебе следует немного подумать:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2007, 11:42 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
q-qи о его уровне, которого вы не знаете. Уважаемый ГостЪ избавил меня от необходимости делать демо, за что ему спасибо. Что до "уровня", то разумные люди тут его не выясняют. Разумные люди стараются его повышать независимо от регалий или степени "засеренности" ника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2007, 13:51 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
ГостЪ q-q А на вашем месте, я не делал бы выводов о человеке и о его уровне, которого вы не знаете. Ты ж сам напросился на выводы, тебе следует немного подумать:) Некорректный пример приводите. Там запрос возвращает строки, естественно что значение переменной не будет равно дефолтному. В нашем случае запрос не возвращает строк. Я бы посоветовал вам не приводить в будущем сомнительные аргументы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2007, 17:45 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
q-qТам запрос возвращает строки Там запрос возвращает EXCEPTION. Это и есть предмет исследований. Поэтому вооружитесь собственными рекомендациями и подумайте еще разок. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2007, 17:49 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous q-qТам запрос возвращает строки Там запрос возвращает EXCEPTION. Это и есть предмет исследований. Поэтому вооружитесь собственными рекомендациями и подумайте еще разок. Удачи. Еще раз для непонятливых повторяю, в том примере запрос возвращат несколько строк, поэтому возникает исключение. Соответственно переменная принимает какое-то значение. В нашем примере, исключение возникает потому что наоборот запрос не возвращает строк, соответственно переменная не получает никакого значения. Больше повторять небуду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2007, 17:56 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
q-q andrey_anonymous q-qТам запрос возвращает строки Там запрос возвращает EXCEPTION. Это и есть предмет исследований. Поэтому вооружитесь собственными рекомендациями и подумайте еще разок. Удачи. Еще раз для непонятливых повторяю, в том примере запрос возвращат несколько строк, поэтому возникает исключение. Соответственно переменная принимает какое-то значение. В нашем примере, исключение возникает потому что наоборот запрос не возвращает строк, соответственно переменная не получает никакого значения. Больше повторять небуду. Непонятливым следует исследовать вопрос подробно, а не выдавать собственное мнение за аксиому, тебя лично никто переубеждать не собирается, но нужна ясность для других людей, которых может обмануть твой уверенный тон . P.S. попридержи лошадей, упрямство - добродетель ослов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2007, 18:04 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Сорри за тысячные грабли, но не поможете с такой штукой? Не работает 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:30 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Когда выполняют, результат такой: Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:32 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Почему не залетаю в этот блок кода? Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:33 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellanПочему не залетаю в этот блок кода? Код: plsql 1. RTFM Aggregate Functions (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:38 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Агрегирующая функция sum() для пустого множества данных, возвращает null, а не пустое множество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:38 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Хорошо, а тогда какое из предопределенных исключений https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm#LNPLS00703 подойдет к моему случаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:45 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellanподойдет к моему случаю? http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:51 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellanХорошо, а тогда какое из предопределенных исключений https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm#LNPLS00703 подойдет к моему случаю? EXCEPTION - нестандартная обработка программного исключения (ошибки) У тебя ошибки нет Что ты хочешь от программы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:51 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellanХорошо, а тогда какое из предопределенных исключений https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm#LNPLS00703 подойдет к моему случаю? Если нужно именно это исключение, то добавь having к запросу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:55 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Дальше по ходу программы, если не контролировать значение MyVar, натыкаюсь на такую ошибку: Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:56 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Сейчас я пытаюсь это контролировать конструкцией вида: Код: plsql 1. , но зачем (изобретать велосипед?), если в базе и так предусмотрены штатные средства обработки исключений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:58 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellanДальше по ходу программы, если не контролировать значение MyVar, натыкаюсь на такую ошибкуПоменяй местами "дальше" и "раньше". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:01 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Или я путаю теплое с мягким? Просто... Когда я этот запрос выполняю в SQL Developer, он не возвращает мне результат, из чего я и сделал вывод, что результат запроса - null. Простите за детские ошибки, если я допускаю таковые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:01 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
fox_student, Можно обойтись без исключений. Например так: Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:10 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellan, Попутал автора Щас, с этим погляжу если успею. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:12 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
БельфяАгрегирующая функция sum() для пустого множества данных, возвращает null, а не пустое множество. А пустое множество отличается от null? А как оно обозначается? И как мне проверить, что у меня результат запроса - пустое множество, а не null? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:17 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellanА пустое множество отличается от null? А как оно обозначается? И как мне проверить, что у меня результат запроса - пустое множество, а не null?Неправильные вопросы порождают неправильные ответы. Напиши конкретно, чего ты хочешь получить запросом, распиши подробнее. Тебе (возможно) подскажут как написать правильно. А с вопросами по теории - к гуглу, они элементарны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:26 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellan, Вы бы конкретно сказали что хотите, это тестовый код - а что реально вас интересует? В вашем коде MyVar всегда NULL. Вы хотите обязательно исключение или таки что-то реальное? Исключение - это крайний случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 16:48 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
stells2Исключение - это крайний случай. Чойта крайний-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 16:55 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
stells2GrayMagellan, Вы бы конкретно сказали что хотите, это тестовый код - а что реально вас интересует? В вашем коде MyVar всегда NULL. Вы хотите обязательно исключение или таки что-то реальное? Исключение - это крайний случай. Вы правы - это тестовый код, вырванный из более полного кода. Но мне его вам стыдно показывать - он наверняка вам покажется ламерским. Вообще тут у меня какая-то лабуда получается... Возможно причиной ошибки является вовсе не тот запрос, который я мучаю в тестовом примере. Но что касается теста - всё-таки интересно, почему я не залетаю в исключение. Ведь нет разницы, что было в переменной до выполнения запроса - null или не null. По идее на момент выполнения запроса в переменную помещается null (или пустое множество, которое наверное затем все равно в null преобразуется), и это должно вызывать исключение в этом блоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:13 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Мне тогда хочется понять - а при каких условиях взводится NO_DATA_FOUND? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:14 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellan, попробуйте примерно так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:16 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Тебе уже ответили, что исключение возникнет тогда, когда не будет строк в результате запроса, у тебя же применена агрегирующая функция, с которой результат будет хотя бы с одной строкой, в данном случае с null. Having спасет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:21 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellanНо мне его вам стыдно показывать - он наверняка вам покажется ламерским. А это вот зря, вы же что-то делаете, а не просите это сделать других. Это нормально, не стесняйтесь. GrayMagellanНо что касается теста - всё-таки интересно, почему я не залетаю в исключение. Ведь нет разницы, что было в переменной до выполнения запроса - null или не null. Вы не правильно интерпретируете поведение программы. Попробуйте выполнить что я дал выше. Есть подозрение, что вы не зайдете в цикл. Вот эти и отличается NULL от того, чего нет вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:21 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellanМне тогда хочется понять - а при каких условиях взводится NO_DATA_FOUND? Это исключение поднимается в случае применения кляузы INTO (select into, fetch into), когда курсор не вернул ни одной записи. Если в этих же условиях курсор вернет более одной записи - поднимется too_many_rows. Первое предназначено для отработки ситуации, когда в результате отсутствия данных переменные-приемники записи не инициализированы. Не надо путать с NULL. Второе - для фиксации ситуации, когда логика приложения находится в противоречии с содержимым БД (нарушение целостности данных либо, что чаще, недостатки логики приложения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:24 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
__vvp_, простите, но как оно может что-то агрегировать, если в dba_extents нет строк с табличным пространством, имя которому 'ХХХХ'. Что агрегировать, если такого табличного пространства нет? а, я понял. вы думаете что это я подменил реальное имя на XXXX. Нет, в тексте тестового запроса так и написано. Это раз. А во-вторых, если бы запрос давал результат хотя бы с одной строкой, то SQL Developer мне бы и выдал эту самую одну строку как результат выполнения запроса? Но он ничего не возвращает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:27 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
stells2, выполнил. Выдало вот что: Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:28 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellan, Попробуй Select sum(1), count(*) From dual Where 1=2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:36 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellan__vvp_, простите, но как оно может что-то агрегировать, если в dba_extents нет строк с табличным пространством, имя которому 'ХХХХ'. Что агрегировать, если такого табличного пространства нет? а, я понял. вы думаете что это я подменил реальное имя на XXXX. Нет, в тексте тестового запроса так и написано. Это раз. А во-вторых, если бы запрос давал результат хотя бы с одной строкой, то SQL Developer мне бы и выдал эту самую одну строку как результат выполнения запроса? Но он ничего не возвращает! Простите, возвращает :(. 1 строка с null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:37 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellan__vvp_, простите, но как оно может что-то агрегировать, если в dba_extents нет строк Так и может. Сколько строк? Ноль: Код: plsql 1. 2. 3. 4. 5. 6. Однако: Код: plsql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:41 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
Получается, что данные есть... 1 строка со значением NULL... Тогда да, исключение NO_DATA_FOUND срабатывать не должно, т.к. в результате выполнения у меня получается 1 строка. Гм... Её значение равно NULL, помещается в MyVar, затирая предыдущее (я пытался делать Код: plsql 1. , и тогда мне база выдавала мне 1. MyVar is not null 2. MyVar is null), после чего я попадаю на сообщение 2. MyVar is null. Все понятно. Да, надо тогда использовать Код: plsql 1. для контроля результатов выполнения запроса. Спасибо большое за разъяснения. Прошу прощения за мою тупливость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:45 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellan, Ну вот, Вы сами все увидели на практике. Ошибка выпала, когда не было ни одной строки , вообще ничего. Вот это ничего и не может вставить хоть что-то. Т.е. дело не в NULL а в том, что нечему просто вставку делать. т.е. в цикл мы не зашли, и тем самым обошли исключение отсутствия записи. А вот на 4 шаге напоролись, на исключение. Если вам важно обойти исключение, т.е. корректно отработать - то код выше, который я адресовал по ошибке fox_student. Эта комбинация позволяет ровно и предсказуемо запрограммировать логику. Если Вам надо именно исключения отлавливать (например, писать в лог), то пример выше и документация, думаю помогут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:48 |
|
||
|
select .. into Ошибка No data found
|
|||
|---|---|---|---|
|
#18+
GrayMagellan, Отчего же не использовать исключение? Все же уже разжевали. Осталось только заставить запрос не возвращать строк ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 17:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1884031]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
191ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 554ms |

| 0 / 0 |
