Синтаксический анализ математических выражений Oracle - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть процесс, который создает в 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

Помня, что это может быть частью очень сложного дерева разбора, а не простого примера, который вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...