创建列来存储其他两列的相乘值

问题描述 投票:0回答:2

我是 SQL 新手,在使用此命令设置列的默认值时遇到问题。 问题是我必须获得产品的 brutto 价格。

ALTER TABLE produkt
ADD vat DECIMAL(5,2) DEFAULT 0.23;

ALTER TABLE produkt
ADD price_br INTEGER DEFAULT var*PRICE_NET;

“产品”是我的桌子 PRICE_NET 是产品的净价。

尝试添加price_br列后,我收到“此处不允许列”错误。 我认为这是一项相当简单的任务,但我无法真正弄清楚。

sql oracle ddl
2个回答
3
投票

我认为你想要一个计算列,而不是默认值。那将是:

ALTER TABLE produkt ADD price_br INTEGER GENERATED ALWAYS AS (var*PRICE_NET);

0
投票

除了戈登的回答。

每当您使用

GENERATED ALWAYS AS
时,您都可以选择指定生成的值是应物理存储在磁盘上还是在查询时动态计算。

ALTER TABLE produkt ADD price_br INTEGER GENERATED ALWAYS AS (var*PRICE_NET) STORED;

将值存储在磁盘上将提高查询性能,特别是当您频繁查询该列、排序、索引等时。

© www.soinside.com 2019 - 2024. All rights reserved.