Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 А нет ли подобной стандартной функции?  [new]
_kyky
Member

Откуда: Москва
Сообщений: 184
create or replace function positive(p_value number) return number
is
begin
if p_value<=0 then
return 0;
else
return p_value;
end if;
end positive;
4 июл 06, 19:12    [2842624]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116202
Почти есть

select greatest(-1,0) from dual
/
0

select greatest(1,0) from dual
/
1
4 июл 06, 19:15    [2842632]     Ответить | Цитировать Сообщить модератору
 Годится, супер! Спасибо!  [new]
_kyky
Member

Откуда: Москва
Сообщений: 184
4 июл 06, 19:22    [2842645]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Ну, функция -- не функция...
SELECT (SIGN(x) + 1) / 2 * x FROM dual
4 июл 06, 22:12    [2842900]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Elic
Member

Откуда:
Сообщений: 29980
Goldminer
(SIGN(x) + 1) / 2 * x
(abs(x) + x) / 2


P.S. Задачку можно решать практически дословно: RTFM decode/case-выражения :)
4 июл 06, 22:29    [2842924]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Takurava
Member

Откуда:
Сообщений: 1776
dmidek
select greatest(-1,0) from dual
ИМХО лаконичней не получится.
5 июл 06, 09:06    [2843380]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Elic
Member

Откуда:
Сообщений: 29980
Takurava
dmidek
select greatest(-1,0) from dual
ИМХО лаконичней не получится.
Да кто ж спорит :)
5 июл 06, 09:25    [2843435]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Elic
Goldminer
(SIGN(x) + 1) / 2 * x
(abs(x) + x) / 2

Вот с этим поспорил бы -- не вполне эквивалентно (чревато переполнениями, если это, скажем, не SELECT, а integer какой-нибудь). Greatest -- без вопросов. Decode/case -- прозрачней всего, но вот в PL/SQL нельзя. Ну а к abs/sign просто личная симпатия ;-))) -- 1) есть абсолютно в любом языке и 2) чуть ли не любую "кусочную" функцию позволяют записать АНАЛИТИЧЕСКИ.
5 июл 06, 15:28    [2845649]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Elic
Member

Откуда:
Сообщений: 29980
Goldminer
Вот с этим поспорил бы -- не вполне эквивалентно (чревато переполнениями
И это вся "неэквивалентность"?! Повеселил...

Goldminer
Decode/case -- прозрачней всего, но вот в PL/SQL нельзя.
Заблуждаешься
5 июл 06, 16:11    [2846004]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116202
Goldminer
Decode/case -- прозрачней всего


Для меня greatest тоже раньше был непрозрачным .
5 июл 06, 16:13    [2846017]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Elic
Goldminer
Вот с этим поспорил бы -- не вполне эквивалентно (чревато переполнениями
И это вся "неэквивалентность"?! Повеселил...

Не вижу ничего веселого... Привычка, видимо от писания на С++, но мне лично режут глаз выражения, где промежуточный результат не помещается в тип операндов. Понятно, что в конкретном SELECT'е обычно пофиг. А если функция в пакете общего назначения? Но это так, к слову...
Elic
Goldminer
Decode/case -- прозрачней всего, но вот в PL/SQL нельзя.
Заблуждаешься

Ну, пардон. В 8-ке нельзя. А мне вот с ней, родимой, приходится дело иметь
6 июл 06, 13:29    [2849640]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
Goldminer
Ну, пардон. В 8-ке нельзя. А мне вот с ней, родимой, приходится дело иметь
Стало быть, и с 8-кой ты дела имел не очень плотно, раз так думаешь.
6 июл 06, 13:32    [2849658]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Elic
Member

Откуда:
Сообщений: 29980
Goldminer
Ну, пардон. В 8-ке нельзя. А мне вот с ней, родимой, приходится дело иметь
Нам ли до твоих личных недосказанных вовремя проблем и до сишных бзиков?

Владимор Конев
Стало быть, и с 8-кой ты дела имел не очень плотно, раз так думаешь.
Речь, вообще-то, о case-expressions, которых там не было
6 июл 06, 13:54    [2849792]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Владимор Конев
Goldminer
Ну, пардон. В 8-ке нельзя. А мне вот с ней, родимой, приходится дело иметь
Стало быть, и с 8-кой ты дела имел не очень плотно, раз так думаешь.
В том смысле, что можно SELECT INTO FROM dual написать? Но это-то однозначно менее удобно. Или я чего-то не понимаю?
6 июл 06, 14:06    [2849865]     Ответить | Цитировать Сообщить модератору
 Re: А нет ли подобной стандартной функции?  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Elic
Нам ли до твоих личных недосказанных вовремя проблем и до сишных бзиков?

Кому бзики, а кому -- стиль программирования. И чем, спрашивается, pls_integer от int радикально отличается? Грабли совершенно одинаковые.
6 июл 06, 14:20    [2849960]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить