Oracle SQL没有提供 eval 用于评估开箱即用的表达式。
eval
所以你可以在PL / SQL中实现它(搜索 Oracle PL/SQL Eval function ) 要么 更简单的是,您可以根据表的内容创建动态视图。
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表达式。在创建视图时,将完成语法检查,在从视图中进行选择时完成评估。
请注意,你应该采取 的 一些关心安全问题 强> 如果表达式是任意输入。