|
|
|
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?fid=52&gotonew=1&tid=1884031]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
10ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 558ms |

| 0 / 0 |
