Это настолько странно, что это можно охарактеризовать как ошибку.
Любое деление, которое приводит к целому числу, работает, но дроби вызывают сообщение об ошибке.
Документация гласит, что:
Каждое выражение должно быть константой или выражение, которое может быть оценено как константа во время компиляции оператора SQL. Большинство простых арифметических выражений и строковые функции могут быть вычислены во время компиляции, но большинство других выражений не могут.
Очевидно, (1/3)
должно быть таким простым арифметическим выражением. Простой обходной путь, конечно, состоит в том, чтобы вычислить ответ и включить в качестве десятичного числа:
SELECT * FROM (VALUES (0.33333333333333333), (2)) AS T(VAL);
Во-вторых, это не так просто, как кажется. Если эти значения используются в операторе CREATE TABLE AS SELECT
, должен ли тип данных быть NUMBER(7,6)
или FLOAT
или что-то еще? Возможно, в этих случаях лучше всего быть конкретными.
Особенности деления и т. Д. Задокументированы в Масштаб и точность в арифметических операциях .