文档解释
ORA-54002: only pure functions can be specified in a virtual column expression
Cause: Column expression contained a function whose evaluation is non-deterministic.
Action: Rewrite column expression to reference only pure functions.
ORA-54002: 虚拟列表达式中只能指定纯函数
错误说明
ORA-54002:当在创建表之前指定虚拟列时,Oracle返回ORA-54002错误。 该错误指示列表达式中仅包含纯函数,而不包括算子,变量或表达式。
常见案例
例如:在创建表之前,尝试为表中的列指定虚拟列表达式。对一列指定一个整体加法表达式,另一列指定一个减法表达式,第三列指定一个乘法表达式。
解决方法
用户只能用纯函数来定制虚拟列表达式,禁止使用任何 Perl 表达式,变量或算子。函数可能来自 Oracle 标准函数库或第三方函数库(如Java函数库)。 例如:
CREATE TABLE emp
(
empno number,
sum_salary number GENERATED ALWAYS AS ((salary + incentive_details)/2) VIRTUAL,
end_salary number GENERATED ALWAYS AS (((salary + incentive_details)/2)-(tax/2)) VIRTUAL
)
上面的声明不应报告此错误,因为它使用了仅是函数的表达式。
如果仍然报告以上错误,则可能存在一些与表达式的数据类型不匹配的问题。 在这种情况下,用户可以在虚拟字段表达式中使用转换函数来修正匹配问题。