Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хранение произвольных формул расчета величин. / 8 сообщений из 8, страница 1 из 1
28.07.2017, 10:29
    #39496502
Хранение произвольных формул расчета величин.
Всем доброго здравия!

Народ, подскажите, кто как подходит к вопросу хранения формул расчетов?
Интересуют подходы решения такого рода задач.
Смысл следующий - позволить пользователю создать свою формулу расчета некой величины по исходным данным.
Исходные данные, формулы и результат расчета - есть данные, хранимые в базе.
...
Рейтинг: 0 / 0
28.07.2017, 11:28
    #39496553
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение произвольных формул расчета величин.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Name            Type            Nullable Default Comments                                                                              
--------------- --------------- -------- ------- ------------------------------------------------------------------------------------- 
FORMULA_ID      NUMBER(38)                                  
VAR_TYPE_ID     NUMBER(38)                       Тип переменной      
VAR_NAME        VARCHAR2(255)                    Имя переменной
FORMULA_NAME    VARCHAR2(255)                    Название              
FORMULA_BODY    CLOB                             Тело формулы
...
...
Рейтинг: 0 / 0
01.08.2017, 11:17
    #39498242
AnSi_Sr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение произвольных формул расчета величин.
Хорошая идея, при слабой реализации открывается большой простор для творчества.
Навскидку:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DECLARE
  vsuserformula   VARCHAR2 (255);
  vnresult        NUMBER;
BEGIN
  vsuserformula := '1 + 1';
 
  EXECUTE IMMEDIATE 'BEGIN :vnresult := ' || vsuserformula || '; END;'
    USING OUT vnresult;
 
  DBMS_OUTPUT.put_line (TO_CHAR (vnresult));
 
  vsuserformula :=
    'CASE WHEN DBMS_SESSION.IS_ROLE_ENABLED(''CONNECT'') = TRUE THEN 1 ELSE 0 END';
 
  EXECUTE IMMEDIATE 'BEGIN :vnresult := ' || vsuserformula || '; END;'
    USING OUT vnresult;
 
  DBMS_OUTPUT.put_line (TO_CHAR (vnresult));
END
...
Рейтинг: 0 / 0
01.08.2017, 12:24
    #39498292
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение произвольных формул расчета величин.
AnSi_Sr,

Код: plsql
1.
vsuserformula := '1; execute immediate ''truncate table all_bank_user_operations drop storage''; '
...
Рейтинг: 0 / 0
09.08.2017, 22:28
    #39502964
Sergei.Agalakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение произвольных формул расчета величин.
Позволить пользователю создавать PL/SQL функции или процедуры. Аккуратно ограничить доступ к данным. Пусть пишут свои формулы на PL/SQL.
...
Рейтинг: 0 / 0
10.08.2017, 08:27
    #39503054
Азагаш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение произвольных формул расчета величин.
в свое время парсил строку на скобки и операции инженерного калькулятора. записывал в таблицу последовательно с учетом простейших правил типа "умножение раньше сложения". бухгалтерам так и без синусов выше крыши будет.
...
Рейтинг: 0 / 0
11.08.2017, 04:52
    #39503771
elunin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранение произвольных формул расчета величин.
простейший расчет можно разложить по шагам
например (5-3) * 8, раскладывается в пять записей.
5,3,8 - могут быть как константы введенные пользователем так и ссылками на проводки или документы (откуда можно взять суммы)

Таблица шагов расчета, & - ссылка на шаг расчета
ШАГ ЗНАК ЛЕВОГО ОПЕРАНДА ЛЕВЫЙ ОПЕРАНД МАТ ОПЕРАЦИЯ ЗНАК ПРАВОГО ОПЕРАНДА ПРАВЫЙ ОПЕРАНД1+52 +33 +84 +&1-+&2 5 +&4 * + &3
...
Рейтинг: 0 / 0
11.08.2017, 10:59
    #39503885
Хранение произвольных формул расчета величин.
eluninразложить по шагама зачем?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Хранение произвольных формул расчета величин. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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