我有一个过程可以在Oracle中创建很长的数学表达式,作为运行计算的机制。
它在那里,因为它与我们的数据相对应。我之所以这么说是因为这就是它的原因,并且出于性能方面的考虑,我们不想在数据库外部运行。
但是,用户现在正在生成多个计算表达式,并且部分表达式被零除存在问题。可悲的是,他们希望在这些计算中具有3/0 = 0的行为,因此它不会停止其余的计算。即使在技术上不正确。
这是他们想要看1的东西的一个例子:
SELECT (3/0)+1 FROM DUAL
我曾建议将分隔符包装在一个函数中,但被告知这对用户来说太困难了,应该在后端处理。
我没有看到Oracle运算符的重载或重载,因此我只能解析复杂的表达式,找到Divide运算,找到分子并指定这些表达式,然后用我的函数进行替换(考虑嵌套计算之类的事情)等)。
有人对此有其他建议吗?从线程中可以看到,我向用户提供了其他建议,但被深深吸引。
理想情况下,我想转换任何这样的表达式:
SELECT (3/0)+1 FROM DUAL
进入
SELECT DIVIDE(3,0)+1 FROM DUAL
请记住,它可能是非常复杂的解析树的一部分,而不是您看到的简单示例。