Re: Отобрать уникальные пары | |
---|---|
Pliskin Сообщений: 2959 Откуда: Новосибирск Дата регистрации: 19.11.2003 |
Вполне сгодится и обычный IIF
|
Re: Отобрать уникальные пары | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
А если воспользоваться теоремой Ферма? Тогда кстати получается вдобавок и универсальное решение для N полей:
------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 2 раз(а). Последнее : Crispy, 14.09.17 11:23 |
Re: Отобрать уникальные пары | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
При чем здесь теорема Ферма? Цитата: |
Re: Отобрать уникальные пары | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Ну как при чем?! При том! Ну пусть будет степень выше:
------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Отобрать уникальные пары | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Вот как раз сути то здесь и не видно.
Будем дальше гадать, или начнем думать? |
Re: Отобрать уникальные пары | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Исправлено 8 раз(а). Последнее : Ydin, 14.09.17 20:04 |
Re: Отобрать уникальные пары | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Не всегда...
------------------ WBR, Igor |
Re: Отобрать уникальные пары | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Игорь, твое высказывание, про "не доверяю" - это эмоции. А Плискин тебе подпел как авторитету.
И разойдись с ним на тему "что посеешь то и пожнешь". Сам виноват и это callback. Можно не доверять женщине. А здесь на что тень кидать своим недоверием? На то, что мне так спокойней от своей ошибки? Да, но и не более Исправлено 1 раз(а). Последнее : Ydin, 15.09.17 17:44 |
Re: Отобрать уникальные пары | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Для проверки на NULL есть функции NVL(), ISNULL(), но не операторы сравнения. |
Re: Отобрать уникальные пары | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну так даже сам leonid и привёл примеры когда квадратные скобки в запросе "не взлетают". Это недокументированная особенность, и как таковая и не должна вызывать доверия Нашёл вариант который работает (протестировал решение) - ну хорошо, но не факт что чуть другой вариант уже не сломается... Жаль что MS не сделали сами для использования в SQL-е функции-синонимы для MIN/MAX... Это решило бы вопрос без лишних телодвижений. ------------------ WBR, Igor |
Re: Отобрать уникальные пары | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Исправлено 2 раз(а). Последнее : Ydin, 15.09.17 22:04 |
Re: Отобрать уникальные пары | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Ydin
Интересное у вас правило, жаль без наглядного примера. Но при всем желании не понял, почему созданная ошибка с оператором m.id1>m.id2 при id2 = NULL лучше, к примеру, вместо предварительной обработки NVL(id2,0) или IIF(ISNULL(id2),0,id2)? Да и вообще, в контексте задачи от ТС, зачем здесь взялся вброс NULL-значений? |
Re: Отобрать уникальные пары | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Цитата:Да я сам понял, что наглядного примера не покажу. И убрал свое сообщение. Цитата:Да, хотел ИК сказать, что с Null не всегда надо пытаться выходить из положения по дефолту, бывает полезно провоцировать ошибку. Так делаю, но по ситуации. Трудно объяснить... Цитата:Нет. Не об этом. Попытаюсь... Наша программа работает на предприятии, где большая структура самого предприятия. Но для всех предприятий этой структуры общая база данных - одна. И наши ошибки в программе пишутся в эту БД. Стратегия написания программы от этого зависит. Исправлено 1 раз(а). Последнее : Ydin, 15.09.17 22:28 |
Re: Отобрать уникальные пары | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
null это специальное "значение". Его "выбрасывать" никак нельзя. Его нужно обрабатывать так или иначе - внутри функции, или вовне - вопрос второй. Но просто "сказать" что я с null не работаю - это неправильно. Такой код является неустойчивым и потому ошибочным. Да, один из вариантов "работы" может быть в генерации ошибки - т.е. увидел что какой-то параметр функции null и тут же сгенерировал ошибку 11.
В контексте изначального вопроса - нет гарантии что в поле рабочей таблицы не встретится null - а значит решение должно учитывать такую возможность. max/min худо-бедно это могут делать (другое, дело что в контексте "поиска уникальных пар" предложенными вариантами эта их особенность будет только мешать). Арифметика - "сломается", IIF - тоже "сломается" (но чуть по другому). Речь шла всё же не про это, а про то что вариант с iif не эквивалентен функциям max/min - даже если не заморачиваться на 3 и более параметра. ------------------ WBR, Igor |
Re: Отобрать уникальные пары | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Смотрите, я пишу ф-ю и ею пользуются другие программисты в нашей фирме.
Скажем, это ф-я FUNCTION SomeFunc LPARA tuParm1 m.tuParm1 = nvl(m.tuParm1 ,0) ... И я сам пишу где-то вызов этой ф-ии. И у меня все хорошо, на здоровье! А потом я говорю, что есть такая ф-я и Вы все можете ей пользоваться! И мои ребята пишут... И где-то проблема. И мне об этом говорят! Потом уже я догоняю, что мне лучше было бы без вот этого - m.tuParm1 = nvl(m.tuParm1 ,0) ! Я то пишу и знаю, что этот параметр д.б. числовым и если не задан (EVL() или NVL()), то можно взять как 0. Но мой программист ошибся, он перепутал параметр, и он Null. И все пляшет - ошибки нет. А где-то далеко потом - не тот результат. Но этот программист все списывается на меня - моя ф-я работает не правильно. Я не въезжаю, долго ищу, задачи не знаю. У них юзер обзывает нас пидарами, т.к. его заказчик его обзывает этим гадким словом... А так, если подумать, то вероятность такой ситуации такая маленькая... Чего об этом думать, когда пишешь код - как-то радостно когда получаешь нужный результат... Я попался на этом может 2-3 раза. Но осадок остался как от встречи с скунксовыми (https://otvet.mail.ru/question/5448287 ) Исправлено 3 раз(а). Последнее : Ydin, 15.09.17 23:25 |
Re: Отобрать уникальные пары | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
О чем и речь. Вы написали код с элементарной ошибкой (замечу, вы не в первый раз делаете эту ошибку), без обработки ошибки, но в ошибке обвинили оппонента. Да еще вдобавок раскрасили мой пост. ТС в своем CREATE CURSOR ... много еще чего взял по умолчанию, и не только явные NULL - в контекст вы их зачем-то внесли, не подправив начальные условия и не предложив свое решение. Так что можете попробовать "сломать IIF чуть по-другому" без вброса новых понятий. |
Re: Отобрать уникальные пары | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Ydin
Напрасно убрали, мне и ваш код и пост понравились. Что касается "трудно объяснить ..." - конечно, этот простой вопрос плавно перерастает в другую и очень объемную тему - глобальную обработку ошибок. Понятно, что это глобальная стратегия и в двух словах ее не изложишь, да и зачем. Замечу, что и в этом вопросе когда-то ИК со мной отнюдь не блистал, заодно и мой интерес пропал. Что касается вашего примера, то здесь у вас ключевая фраза: - "мой программист ошибся, он перепутал параметр". Такое может происходить с любой функцией, с любыми параметрами - и что теперь, от всего шарахаться. Да и с вами описанной ситуацией обычная история, осадков хватает, терпишь. Это организационный вопрос - вдумчивая работа с персоналом, комментарии, защита от дурака, отслеживание ошибок ... - да вы с этим хорошо знакомы. |
Re: Отобрать уникальные пары | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
О, да! Это хорошая вещь. Вот бы еще на этом форуме такую внедрить. |
Re: Отобрать уникальные пары | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Строго говоря - "защита от дурака" это свидетельство вашей беспомощности, когда вы боитесь даже незнакомого вам дурака. Если все же применительно к коду - если вы написали код "на дурака", значит он интересен только дуракам. Исправлено 1 раз(а). Последнее : lulgu, 16.09.17 00:45 |
Re: Отобрать уникальные пары | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Александр, я ж не спорю - это как раз пример "плохой" работы с null. Если функция не должна работать с null (не закодирована она так, или в принципе null не допустим в качестве параметра) то будет совершенно логично и правильно первым шагом проверить параметр и выкинуть error 11 - НЕ пытаться "всё поправить своими силами" (хотя это в парадигме фокса - полную чушь можно написать в коде, а он таки будет пытаться это хоть как-то исполнить Вместо того чтобы сразу написать "ну ты и идиот, братюня"). Т.к. большинство встроенных функций фокса с null работают, и работают "логично и правильно" - если смотреть на это "со стороны". Но для КОНКРЕТНОГО применения в данном конкретном месте это самое "логичное и правильное поведение" оказывает совершенно неподходящим Именно поэтому нужно: 1) знать и никогда не забывать что помимо циферок/буковок/дат есть ещё хитрый зверь null. 2) при написании особо ответственного, или отчуждаемого кода (когда твою функцию может вызвать кто угодно, и засунуть в параметры что угодно) предусмотреть проверку параметров - как на типы/диапазоны значений, так и на null - и если "по логике" нельзя никак сделать исправление переданного значения, или прописать "значение по умолчанию", то выкинуть ошибку. ------------------ WBR, Igor |
© 2000-2024 Fox Club  |