Oracle 数据库中的虚拟列
virtual column in Oracle database
我在 table 中有 5 列。我必须将 difference of max value and min value
存储在另一个 column
中。我正在使用以下查询。这里 a b c d e
是列名。
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (max(a,b,c,d,e)-Min(a,b,c,d,e)) VIRTUAL);
我遇到了以下错误。
Error starting at line : 28 in command -
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (max(a,b,c,d,e)-Min(a,b,c,d,e)) VIRTUAL)
Error report -
ORA-00934: group function is not allowed here
00934. 00000 - "group function is not allowed here"
*Cause:
*Action:
如果群组功能不能使用,有没有办法解决?
我建议你使用 GREATEST 和 LEAST
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (GREATEST (a,b,c,d,e)-LEAST(a,b,c,d,e)) VIRTUAL);
参见:db<>fiddle here
这些函数适用于当前行,可用于您的虚拟列,而 MIN/MAX 跨多行运行,不能用于您的虚拟列。
如果您确实需要跨多行操作,那么视图可能是最简单的选择。
我在 table 中有 5 列。我必须将 difference of max value and min value
存储在另一个 column
中。我正在使用以下查询。这里 a b c d e
是列名。
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (max(a,b,c,d,e)-Min(a,b,c,d,e)) VIRTUAL);
我遇到了以下错误。
Error starting at line : 28 in command -
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (max(a,b,c,d,e)-Min(a,b,c,d,e)) VIRTUAL)
Error report -
ORA-00934: group function is not allowed here
00934. 00000 - "group function is not allowed here"
*Cause:
*Action:
如果群组功能不能使用,有没有办法解决?
我建议你使用 GREATEST 和 LEAST
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (GREATEST (a,b,c,d,e)-LEAST(a,b,c,d,e)) VIRTUAL);
参见:db<>fiddle here
这些函数适用于当前行,可用于您的虚拟列,而 MIN/MAX 跨多行运行,不能用于您的虚拟列。
如果您确实需要跨多行操作,那么视图可能是最简单的选择。