powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / evaluate simple expressions
9 сообщений из 9, страница 1 из 1
evaluate simple expressions
    #39825573
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача такая:

есть таблица :


Код: plaintext
1.
2.
3.
4.
5.
N            Пётр
L             Борисов
C            10
Z            20
Z+C        ? (надо получить 30)
N||L        ? (надо получить Петр Борисов)

Допускаются +,-,*,/,(,),||
Конкатенация допустима только к строкам, остальные операторы - только к числам.

Возможно ли?
...
Рейтинг: 0 / 0
evaluate simple expressions
    #39825577
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно.

Реализуйте свой парсер птичьего языка.
...
Рейтинг: 0 / 0
evaluate simple expressions
    #39825588
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

а оракловских пакетов на эту тему нет?
...
Рейтинг: 0 / 0
evaluate simple expressions
    #39825590
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
with tbl as (
              select 'N' tag,'Peter' val from dual union all
              select 'L' tag,'Borisov' val from dual union all
              select 'C' tag,'10' val from dual union all
              select 'Z' tag,'20' val from dual
            ),
   input as (
               select 'Z+C' expr from dual union all
               select 'N||L' expr from dual
              )
select  expr,
        xmlcast(
                xmlquery(
                         '/ROWSET/ROW/C'
                         passing xmltype(
                                         dbms_xmlgen.getxml(
                                                            'select ' || regexp_replace(
                                                                                        expr,
                                                                                        '([A-Z]+)',
                                                                                        '(select val from tbl where tag = ''\1'')'
                                                                                       ) || ' c from dual'
                                                           )
                                        )
                         returning content
                        )
                as varchar2(30)
               ) res
  from  input
/

EXPR RES
---- ------------------------------
Z+C  30
N||L PeterBorisov

SQL>  



SY.
...
Рейтинг: 0 / 0
evaluate simple expressions
    #39825594
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYSY.

Есть замечательная водка "Русалка" самарского завода Родник. Как насчёт субботы? Могу завезти.
...
Рейтинг: 0 / 0
evaluate simple expressions
    #39825597
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookindmdmdm,

а оракловских пакетов на эту тему нет?xmlquery может кое-что посчитать, если ему в правильном виде скормить.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
with
t (x,value) as
(select 'N', 'Petr' from dual
union all select 'S', ' ' from dual
union all select 'L', 'Borisov' from dual
union all select 'C', '10' from dual
union all select 'Z', '20' from dual),
t0 (expr) as
(select 'Z+C' from dual
union all select '(Z+C)/C/Z' from dual
union all select 'N||S||L' from dual)
select xmlquery(min(result) keep (dense_rank last order by rn) returning content) result
from
(
  select *
  from
  (select replace(case when instr(expr,'||')>0
                       then 'fn:concat('||rtrim(regexp_replace(expr, '(\S)(\|\|)?', '''\1'','),',')||')'
                       else expr
                  end,'/',' div ') expr, x, value
     from t0 join t on instr(expr,x)>0)
  model
  partition by (expr)
  dimension by (rownum rn)
  measures (cast(expr as varchar2(4000)) result, x, value)
  (
    result[any] order by rn = presentv(result[cv(rn)-1],
                                       replace(result[cv(rn)-1],x[cv(rn)],value[cv(rn)]),
                                       replace(result[cv(rn)],x[cv(rn)],value[cv(rn)]))
  )
)
group by expr;

RESULT
--------------------------------------------------------------------------------
.15
30
Petr Borisov
...
Рейтинг: 0 / 0
evaluate simple expressions
    #39825598
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinЕсть замечательная водка "Русалка" самарского завода Родник. Как насчёт субботы? Могу завезти.

Ну если визу получить успеешь то заезжай .

SY.
...
Рейтинг: 0 / 0
evaluate simple expressions
    #39825604
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кобанчег,

Я так совсем сопьюсь
...
Рейтинг: 0 / 0
evaluate simple expressions
    #39825649
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребяты изощрённо не жалеют гвоздей для крышки гроба...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / evaluate simple expressions
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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