powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / деление на ноль (в Select`e)
25 сообщений из 29, страница 1 из 2
деление на ноль (в Select`e)
    #34662001
DemOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте !
Код: plaintext
1.
select 'деление на ноль',  10 /kol from table

Возможно ли используя только Select вывести строки у которых kol=0

Например если в таблице table встречается 3 записи с kol=0 то в результате селекта они вывидутся и 10/kol будет null (Либо 0, либо любое значение)

Спасибо !
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34662021
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
decode/case поможет
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34662023
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Декоды например

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> with tab1 as
   2   (select  0  kol from dual
   3    union all
   4    select  1  kol from dual
   5    )
   6   select decode(kol,  0 , 'Delenie na nolj', 'OK'), decode(kol, 0 , 0 , 10 /kol) from tab1
   7   /
 
DECODE(KOL, 0 ,'DELENIENANOLJ',' DECODE(KOL, 0 , 0 , 10 /KOL)
------------------------------ ----------------------
Delenie na nolj                                      0 
OK                                                  10 
 
SQL> 

Если Вам нужны только плохие строки соответственно через WHERE ...
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34662043
DemOk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо !
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759341
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может кто-нибудь подскажет более гибкое решение (на ум приходит что-то вроде "можно ли поймать исключение на уровне отдельной строки SQL и обаботав его продолжить выполнение запроса :)") на случай если я НЕ ЗНАЮ где у меня знаменатель и следовательно не могу анализировать его на предмет нуля?

Попробую немного упростить и сформулировать конкретную проблему. Есть некое представление, в котором есть числовые поля a1..a20, нужно для каждой строки представления вычислить некую функцию зависящую от a1..a20, к примеру

select a1 + a2 * (a3 - a4) / (a5 - a6)
from view1

Функция может быть очень сложная и следовательно определение и анализ знаменателей затруднен.
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759357
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На данный момент приходит в голову только написание и использование своей функции вида

function CalcFormula(p_formula in varchar2,
a1 in number,
a2 in number,
...
a20 in number) return number;

которая подставит значения, посчитает и в случае чего поймает исключение
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759392
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы не показаться полным идиотом (касательно затрудненного определения и анализа знаменателей) отмечу, что формула конструируется динамически, соответственно анализ должен быть автоматизированным
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759393
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DemOkЗдравствуйте !
Код: plaintext
1.
select 'деление на ноль',  10 /kol from table

Возможно ли используя только Select вывести строки у которых kol=0

Например если в таблице table встречается 3 записи с kol=0 то в результате селекта они вывидутся и 10/kol будет null (Либо 0, либо любое значение)
Код: plaintext
1.
select 'деление на ноль',  10 /NULLIF(kol, 0 ) from table
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759420
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: plaintext
1.
select 'деление на ноль',  10 /NULLIF(kol, 0 ) from table
Отличное решение!
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759430
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарисчи! Хватит обсуждать проблему DemOk-а, она давно решена, посмотрите на мою :) Или я сделал ошибку не создав свой топик, а дописав существующий?
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759440
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boomer0kТоварисчи! Хватит обсуждать проблему DemOk-а, она давно решена, посмотрите на мою :) Или я сделал ошибку не создав свой топик, а дописав существующий?

Вы уверены, что это решение только проблемы DemOk-a ?
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759444
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boomer0k Или я сделал ошибку не создав свой топик, а дописав существующий?
Определенно сделали.
Когда будете создавать новый топик, потрудитесь поподробнее описать проблему - пока не очень понятно что означает выражовывание "не знаю где у меня знаменатель"
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759446
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmidek boomer0kТоварисчи! Хватит обсуждать проблему DemOk-а, она давно решена, посмотрите на мою :) Или я сделал ошибку не создав свой топик, а дописав существующий?

Вы уверены, что это решение только проблемы DemOk-a ?

Абсолютно - прочитайте все мои посты в данном топике. Или предложите конкретное решение для моей проблемы :)
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759451
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous boomer0k Или я сделал ошибку не создав свой топик, а дописав существующий?
Определенно сделали.
Когда будете создавать новый топик, потрудитесь поподробнее описать проблему - пока не очень понятно что означает выражовывание "не знаю где у меня знаменатель"

Действительно не знаю - формула конструируется динамически.
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759454
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boomer0kформула конструируется динамически.
Добавьте NULLIF в конструктор формул.
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759457
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boomer0k dmidek boomer0kТоварисчи! Хватит обсуждать проблему DemOk-а, она давно решена, посмотрите на мою :) Или я сделал ошибку не создав свой топик, а дописав существующий?

Вы уверены, что это решение только проблемы DemOk-a ?

Абсолютно - прочитайте все мои посты в данном топике. Или предложите конкретное решение для моей проблемы :)

Когда Вы будете динамически конструировать свою формулу, после знака деления добавляете
NULLIF( а в конце ,0)
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759463
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous boomer0kформула конструируется динамически.
Добавьте NULLIF в конструктор формул.

NULLIF должен применяться только к знаменателям, а я не знаю где они :)) Если прописать его везде, то простая формула а1+а2+а3 рискует превратиться в NULL в случае нулевого значения в одном из агрументов.
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759468
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boomer0k andrey_anonymous boomer0kформула конструируется динамически.
Добавьте NULLIF в конструктор формул.
NULLIF должен применяться только к знаменателям, а я не знаю где они
Еще раз, по буквам: поправьте КОНСТРУКТОР ФОРМУЛ.
В конструкторе Вы должны совершенно точно знать где знаменатель, иначе конструирование просто невозможно ;)
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759471
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boomer0k andrey_anonymous boomer0kформула конструируется динамически.
Добавьте NULLIF в конструктор формул.

NULLIF должен применяться только к знаменателям, а я не знаю где они :)) Если прописать его везде, то простая формула а1+а2+а3 рискует превратиться в NULL в случае нулевого значения в одном из агрументов.

Я же написал - после знака деления ! Знак деления Вы же можете идентифицировать.
У Вас же там все равно какой- то лексический анализатор должен существовать,
который например выявляет соответствие скобок и т.д. Вот и расширьте его двумя
опциями...
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759522
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmidek boomer0k andrey_anonymous boomer0kформула конструируется динамически.
Добавьте NULLIF в конструктор формул.

NULLIF должен применяться только к знаменателям, а я не знаю где они :)) Если прописать его везде, то простая формула а1+а2+а3 рискует превратиться в NULL в случае нулевого значения в одном из агрументов.

Я же написал - после знака деления ! Знак деления Вы же можете идентифицировать.
У Вас же там все равно какой- то лексический анализатор должен существовать,
который например выявляет соответствие скобок и т.д. Вот и расширьте его двумя
опциями...

Пасиба, идея понятна. Конец дня, голова квадратная... Формула конструируется не мною, но это не мешает ее переконструировать, но это по сути и будет являться определением знаменателей. Просто ставить NULLIF после деления не вариант, потому что формула a1/(a2/a3) + а4, случае а3 = 0 должна вернуть а4, а не NULL
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759534
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boomer0k Просто ставить NULLIF после деления не вариант, потому что формула a1/(a2/a3) + а4, случае а3 = 0 должна вернуть а4, а не NULL

О! Вы уверены ? Вспомнил название книги из детства "Веселая арифметика" :-)
Ну неважно, пусть тогда Ваши "анализаторы" подкрутят соответственно...
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759544
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmidek boomer0k Просто ставить NULLIF после деления не вариант, потому что формула a1/(a2/a3) + а4, случае а3 = 0 должна вернуть а4, а не NULL

О! Вы уверены ? Вспомнил название книги из детства "Веселая арифметика" :-)
Ну неважно, пусть тогда Ваши "анализаторы" подкрутят соответственно...

Абсолютно... Вспомнил название книги из детства "Матанализ"... Требования ставлю не я, а мне. a1/(a2/a3) + а4 должно вернуть именно а4 если а3 равно нулю.
Вопрос был именно в том как уйти от необходимости написания анализаторов.
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34759558
xymbo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmidek, я думаю boomer0k решил, что при таких значениях a1/(a2/a3) + а4 должно вернуть именно а4 если а3 равно нулю. , получается a1/inf + a4, где inf это бесконечность, но в Oracle нет понятия бесконечности. Тем более, в матанализе, значения стремятся к 0(то есть бесконечно малые), а не равны 0.
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34802546
boomer0k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xymbodmidek, я думаю boomer0k решил, что при таких значениях a1/(a2/a3) + а4 должно вернуть именно а4 если а3 равно нулю. , получается a1/inf + a4, где inf это бесконечность, но в Oracle нет понятия бесконечности. Тем более, в матанализе, значения стремятся к 0(то есть бесконечно малые), а не равны 0.

Понятие видимо есть, но оно завуалировано
...
Рейтинг: 0 / 0
деление на ноль (в Select`e)
    #34803700
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a1/(a2/a3) + a4 = (a1*a3)/a2 + a4 - и требование вполне законно, если a2<>0.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / деление на ноль (в Select`e)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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