Oracle SQL не предоставляет функцию eval
для оценки выражения "из коробки".
Таким образом, вы можете реализовать его в PL / SQL (поиск Oracle PL/SQL Eval function
) или
Проще говоря, вы можете создать динамическое представление на основе содержимого таблицы.
Пример - ваши данные
select * from tab;
EXPR
--------------------------------------------
(-2.02 + 2.46 * LN(0.66)) * 0.95 * 5 * 0.001
5*5
Запрос на создание динамического представления
select 'create view my_expr as ' as tab from dual union all
select q'{select q'[}'|| expr ||q'{]' as expr, }'|| expr ||' as result from dual union all' from tab union all
select 'select null, null from dual where 1=0' from dual;
Обратите внимание, что последняя строка является фиктивной, чтобы избавиться от последнего союза всех
Запрос возвращает
create view my_expr as
select q'[(-2.02 + 2.46 * LN(0.66)) * 0.95 * 5 * 0.001]' as expr, (-2.02 + 2.46 * LN(0.66)) * 0.95 * 5 * 0.001 as result from dual union all
select q'[5*5]' as expr, 5*5 as result from dual union all
select null, null from dual where 1=0
Какой скрипт для определения представления.
После создания представления вы получите результат:
select * from my_expr;
EXPR RESULT
-------------------------------------------- ----------
(-2.02 + 2.46 * LN(0.66)) * 0.95 * 5 * 0.001 -0,014450298
5*5 25
Вы можете ввести любое допустимое выражение Oracle в таблицу ввода. Пока вы создаете представление, будет выполняться проверка синтаксиса, оценка выполняется при выборе из представления.
Обратите внимание, что вам следует позаботиться о безопасности на случай, если выражение является произвольным вводом.