数据库表中的公式/计算列
Posted
技术标签:
【中文标题】数据库表中的公式/计算列【英文标题】:Formula / Calculation columns in a database table 【发布时间】:2017-09-11 06:24:10 【问题描述】:我不认为这是可能的,也不认为这是有道理的,但这里的大多数人都比我聪明得多,而且问也无妨。是否可以在作为公式的数据库中创建表。我的意思不是查询。我的意思是,假设我有一张表,其中一列是“价格”,另一列是“数量”,我想要一列“成本”来计算(价格 * 数量)......因为数据被导入。这样以后我就可以:
从表中选择 *;
如果你告诉我这是一个愚蠢的问题,我会理解的,但我是从内部客户那里得到的,需要进行调查。我运行的数据库是 BlueMix 上的 DB2。
【问题讨论】:
【参考方案1】:您可以将成本列的默认值设置为
ALTER TABLE table-name ALTER COLUMN cost set cost=price*quantity;
或者您可以按如下方式创建触发器,
db2 create trigger trigger_name after insert on table_name
for each row mode db2sql begin atomic update tablle_name
set cost=qty*price; end
【讨论】:
谢谢你,Jinesh。我有点希望你能告诉我,我什至问这个问题都很愚蠢......但现在我必须这样做:/谢谢【参考方案2】:尝试使用触发器。你在这里有一个教程: https://www.tutorialspoint.com/db2/db2_triggers.htm
数据库触发器是自动执行的程序代码 响应某些事件
【讨论】:
谢谢 vladatr。我有点希望你能告诉我,我什至问这个问题都很愚蠢......但现在我必须这样做:/谢谢【参考方案3】:您可以使用计算列来执行操作。在计算列中,您将给出默认公式为
ALTER TABLE <TABLENAME> ADD <COLUMN_NAME> AS (<COLUMN_NAME1> * <COLUMN_NAME2>);
因此,上述查询仅用于您想要添加该列的同一张表。 如果要添加另一个表,有很多方法。
例子
-
事务(可能导致死锁)
触发器(可能会导致服务器变慢)
存储过程(使用 select 子句的普通插入语句)
没有存储过程,我们可以用普通的插入语句正确查询。
例子:
CREATE TABLE Cost_Table
(
Cost int
);
INSERT INTO Cost_Table (Cost)<BR>
SELECT price * quantity FROM Table_name;
这是优化的方式。因此,我们可以使用上面的查询而不是触发器。 因此上面的查询在事务和存储过程中使用。
【讨论】:
【参考方案4】:如果您不小心,可能会导致严重的安全漏洞。查找“SQL 代码注入”。
但要做到这一点,另一条路线可能是在存储过程中使用EXECUTE IMMEDEATE
。
【讨论】:
以上是关于数据库表中的公式/计算列的主要内容,如果未能解决你的问题,请参考以下文章