Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Дробная степень через connect by  [new]
student1234
Guest
SQL> var p number;
SQL> exec :p:=3;

PL/SQL procedure successfully completed.

SQL> var n number;
SQL> exec :n:=3;

PL/SQL procedure successfully completed.

SQL> with t as (select max(sys_connect_by_path(:n,'*')) s from dual connect by level<=:p)
  2  select s from t;

S
--------------------------------------------------------------------------------
*3*3*3

SQL> with t as (select max(sys_connect_by_path(:n,'*')) s from dual connect by level<=:p)
  2  select dbms_aw.eval_number(regexp_replace('1'||s||'*1','[^0-9]+','*')) r from t;

         R
----------
27

Я нашол на форуме как пасчитать сумму чисел в строке и по аналогии сделал для целых палажительных степеней.
А как сделать для дробных? Функции типа power нельзя использавать по условие задания.

И ещё вопрос, как обойти ORA-30003: illegal parameter in SYS_CONNECT_BY_PATH function если я хочу сделать для палажительных степеней разделитель '*', а для отрецательных '/'. Я пробовал через
sys_connect_by_path(:n,decode(sign(:n),-1,'/','*')
и палучил ошибку. Думаю обойти это через union all с условием, каторое будет отсекать одну из частей по знаку переменной :n, но можит можно передать прямо в sys_connect_by_path?
24 май 11, 13:59    [10700004]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
student1234,

откройте для себя sql-функцию power
24 май 11, 14:09    [10700077]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
student1234
Guest
Нашол как обойти ORA-30003
SQL> exec :n:=-3;

PL/SQL procedure successfully completed.

SQL> with t as (select max(sys_connect_by_path(:n,'|')) s from dual connect by level<=:p)
  2  select dbms_aw.eval_number(regexp_replace('1'||s||'|1','[^0-9]+',decode(sign(:n),-1,'/','*'))) r from t;

         R
----------
.037037037
но так и не могу придумать как сделать дробную степень через connect by.

orawish, по заданию power использавать нельзя.
24 май 11, 14:15    [10700131]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
1-курс
Guest
нельзя использовать power или надо использовать connect by??

SQL> select power(25,0.5) from dual;

POWER(25,0.5)
-------------
            5

SQL> select exp(0.5*ln(25)) from dual;

EXP(0.5*LN(25))
---------------
              5


только помните об ограничениях логарифма
24 май 11, 14:19    [10700153]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
student1234
Guest
1-курс,

Написать запрос для двух переменных (a,b), возвращающий a^b, не используя функции возведения в степень.

Наверно exp тоже функция возведения в степень? Тогда её нельзя.
24 май 11, 14:27    [10700218]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
student1234
Guest
нашол на форуме заготовку для решения без dbms_aw.eval_number
 with t as (select max(sys_connect_by_path(:n,'|')) s from dual connect by level<=abs(:p))
 select xmlquery(regexp_replace('1'||s||'|1','[^0-9]+',decode(sign(:p),-1,' div ','*')) returning content) r from t;

Но опять же непанятно как быть с дробными степенями. Неужеле некто не знает?
24 май 11, 15:16    [10700649]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
parkan4k
Member

Откуда:
Сообщений: 32
Содержание сообщений
Запрещается:
...
* "Коверканье" слов русского языка.
24 май 11, 15:23    [10700706]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
student1234
Guest
parkan4k,

А у самово пятёрка по русскому языку с детского сада? Можит в каких то словах и ошибаюсь.
По теме вопроса сказать явно нечево?
24 май 11, 15:28    [10700752]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
student1234
parkan4k,

А у самово пятёрка по русскому языку с детского сада? Можит в каких то словах и ошибаюсь.
По теме вопроса сказать явно нечево?

Может тебе в д/с для начала?
24 май 11, 15:33    [10700801]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
student1234,

Бери, через экспоненту и логарифм (с модулями и сохранением знака поаккуратней).
Вот пройдете на матане разложение в ряды - можешь через них попробовать.
24 май 11, 15:39    [10700859]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
student1234
Guest
__vvp_,

Тупое задание - вопросы к системе образования.
Я написал задание и найденный мной вариант его решения, но я не знаю как добавить дополнительный функционал к нему. О чём и спросил. Если для кого-то проблема в том, что я не пользуюсь проверкой орфографии, а пишу, как умею, то это никак не способствует решению вопроса.

Вам тоже нечего сказать по существу вопроса?

(ворд на эти фразы не ругался, но не буду я каждую фразу в него сначала пихать,)
24 май 11, 15:41    [10700878]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
Самое крепкое дерево - дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность
24 май 11, 15:43    [10700890]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
student1234
Guest
Сергей Арсеньев,

Спасибо. Я тоже так понял, что через ряды надо. Но как всегда преподы по разным предметам не согласовали между сабой скорость подачи материала по курсам и выдачу заданий.

Разложение в ряд через connect by получится написать?
24 май 11, 15:45    [10700907]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18371
select exp(<степень>*ln(<число>)) from dual;
24 май 11, 15:50    [10700940]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
student1234,

Imho правильнее здесь через PL/SQL - он больше подходит для вычислительных алгоритмов (ну или через кофе).
24 май 11, 15:52    [10700947]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
student1234
Guest
andrey_anonymous,

10700153
10700218
24 май 11, 15:52    [10700948]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
student1234
Guest
Сергей Арсеньев,

Спасибо ещё раз. Единственый ответевший по теме и помогший с нахождением пути к решению.
Тему можно закрывать.
24 май 11, 16:24    [10701243]     Ответить | Цитировать Сообщить модератору
 Re: Дробная степень через connect by  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Кстати навеяло.
25 май 11, 08:13    [10703656]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить