|
|
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте ! Код: plaintext 1. Возможно ли используя только Select вывести строки у которых kol=0 Например если в таблице table встречается 3 записи с kol=0 то в результате селекта они вывидутся и 10/kol будет null (Либо 0, либо любое значение) Спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 17:02 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
decode/case поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 17:06 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
Декоды например Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Если Вам нужны только плохие строки соответственно через WHERE ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 17:06 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
Большое спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 17:10 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
А может кто-нибудь подскажет более гибкое решение (на ум приходит что-то вроде "можно ли поймать исключение на уровне отдельной строки SQL и обаботав его продолжить выполнение запроса :)") на случай если я НЕ ЗНАЮ где у меня знаменатель и следовательно не могу анализировать его на предмет нуля? Попробую немного упростить и сформулировать конкретную проблему. Есть некое представление, в котором есть числовые поля a1..a20, нужно для каждой строки представления вычислить некую функцию зависящую от a1..a20, к примеру select a1 + a2 * (a3 - a4) / (a5 - a6) from view1 Функция может быть очень сложная и следовательно определение и анализ знаменателей затруднен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 18:38 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
На данный момент приходит в голову только написание и использование своей функции вида function CalcFormula(p_formula in varchar2, a1 in number, a2 in number, ... a20 in number) return number; которая подставит значения, посчитает и в случае чего поймает исключение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 18:44 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
Чтобы не показаться полным идиотом (касательно затрудненного определения и анализа знаменателей) отмечу, что формула конструируется динамически, соответственно анализ должен быть автоматизированным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 18:49 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
DemOkЗдравствуйте ! Код: plaintext 1. Возможно ли используя только Select вывести строки у которых kol=0 Например если в таблице table встречается 3 записи с kol=0 то в результате селекта они вывидутся и 10/kol будет null (Либо 0, либо любое значение) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 18:49 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 18:56 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
Товарисчи! Хватит обсуждать проблему DemOk-а, она давно решена, посмотрите на мою :) Или я сделал ошибку не создав свой топик, а дописав существующий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 18:59 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
boomer0kТоварисчи! Хватит обсуждать проблему DemOk-а, она давно решена, посмотрите на мою :) Или я сделал ошибку не создав свой топик, а дописав существующий? Вы уверены, что это решение только проблемы DemOk-a ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:01 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
boomer0k Или я сделал ошибку не создав свой топик, а дописав существующий? Определенно сделали. Когда будете создавать новый топик, потрудитесь поподробнее описать проблему - пока не очень понятно что означает выражовывание "не знаю где у меня знаменатель" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:02 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
dmidek boomer0kТоварисчи! Хватит обсуждать проблему DemOk-а, она давно решена, посмотрите на мою :) Или я сделал ошибку не создав свой топик, а дописав существующий? Вы уверены, что это решение только проблемы DemOk-a ? Абсолютно - прочитайте все мои посты в данном топике. Или предложите конкретное решение для моей проблемы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:02 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous boomer0k Или я сделал ошибку не создав свой топик, а дописав существующий? Определенно сделали. Когда будете создавать новый топик, потрудитесь поподробнее описать проблему - пока не очень понятно что означает выражовывание "не знаю где у меня знаменатель" Действительно не знаю - формула конструируется динамически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:03 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
boomer0kформула конструируется динамически. Добавьте NULLIF в конструктор формул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:04 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
boomer0k dmidek boomer0kТоварисчи! Хватит обсуждать проблему DemOk-а, она давно решена, посмотрите на мою :) Или я сделал ошибку не создав свой топик, а дописав существующий? Вы уверены, что это решение только проблемы DemOk-a ? Абсолютно - прочитайте все мои посты в данном топике. Или предложите конкретное решение для моей проблемы :) Когда Вы будете динамически конструировать свою формулу, после знака деления добавляете NULLIF( а в конце ,0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:06 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous boomer0kформула конструируется динамически. Добавьте NULLIF в конструктор формул. NULLIF должен применяться только к знаменателям, а я не знаю где они :)) Если прописать его везде, то простая формула а1+а2+а3 рискует превратиться в NULL в случае нулевого значения в одном из агрументов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:09 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
boomer0k andrey_anonymous boomer0kформула конструируется динамически. Добавьте NULLIF в конструктор формул. NULLIF должен применяться только к знаменателям, а я не знаю где они Еще раз, по буквам: поправьте КОНСТРУКТОР ФОРМУЛ. В конструкторе Вы должны совершенно точно знать где знаменатель, иначе конструирование просто невозможно ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:11 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
boomer0k andrey_anonymous boomer0kформула конструируется динамически. Добавьте NULLIF в конструктор формул. NULLIF должен применяться только к знаменателям, а я не знаю где они :)) Если прописать его везде, то простая формула а1+а2+а3 рискует превратиться в NULL в случае нулевого значения в одном из агрументов. Я же написал - после знака деления ! Знак деления Вы же можете идентифицировать. У Вас же там все равно какой- то лексический анализатор должен существовать, который например выявляет соответствие скобок и т.д. Вот и расширьте его двумя опциями... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:12 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
dmidek boomer0k andrey_anonymous boomer0kформула конструируется динамически. Добавьте NULLIF в конструктор формул. NULLIF должен применяться только к знаменателям, а я не знаю где они :)) Если прописать его везде, то простая формула а1+а2+а3 рискует превратиться в NULL в случае нулевого значения в одном из агрументов. Я же написал - после знака деления ! Знак деления Вы же можете идентифицировать. У Вас же там все равно какой- то лексический анализатор должен существовать, который например выявляет соответствие скобок и т.д. Вот и расширьте его двумя опциями... Пасиба, идея понятна. Конец дня, голова квадратная... Формула конструируется не мною, но это не мешает ее переконструировать, но это по сути и будет являться определением знаменателей. Просто ставить NULLIF после деления не вариант, потому что формула a1/(a2/a3) + а4, случае а3 = 0 должна вернуть а4, а не NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:26 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
boomer0k Просто ставить NULLIF после деления не вариант, потому что формула a1/(a2/a3) + а4, случае а3 = 0 должна вернуть а4, а не NULL О! Вы уверены ? Вспомнил название книги из детства "Веселая арифметика" :-) Ну неважно, пусть тогда Ваши "анализаторы" подкрутят соответственно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:32 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
dmidek boomer0k Просто ставить NULLIF после деления не вариант, потому что формула a1/(a2/a3) + а4, случае а3 = 0 должна вернуть а4, а не NULL О! Вы уверены ? Вспомнил название книги из детства "Веселая арифметика" :-) Ну неважно, пусть тогда Ваши "анализаторы" подкрутят соответственно... Абсолютно... Вспомнил название книги из детства "Матанализ"... Требования ставлю не я, а мне. a1/(a2/a3) + а4 должно вернуть именно а4 если а3 равно нулю. Вопрос был именно в том как уйти от необходимости написания анализаторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:35 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
dmidek, я думаю boomer0k решил, что при таких значениях a1/(a2/a3) + а4 должно вернуть именно а4 если а3 равно нулю. , получается a1/inf + a4, где inf это бесконечность, но в Oracle нет понятия бесконечности. Тем более, в матанализе, значения стремятся к 0(то есть бесконечно малые), а не равны 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 19:40 |
|
||
|
деление на ноль (в Select`e)
|
|||
|---|---|---|---|
|
#18+
xymbodmidek, я думаю boomer0k решил, что при таких значениях a1/(a2/a3) + а4 должно вернуть именно а4 если а3 равно нулю. , получается a1/inf + a4, где inf это бесконечность, но в Oracle нет понятия бесконечности. Тем более, в матанализе, значения стремятся к 0(то есть бесконечно малые), а не равны 0. Понятие видимо есть, но оно завуалировано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2007, 13:11 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=34759544&tid=1887411]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
184ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 499ms |

| 0 / 0 |
