数据库表中的公式/计算列

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

【讨论】:

以上是关于数据库表中的公式/计算列的主要内容,如果未能解决你的问题,请参考以下文章

怎么导出一张表中的数据 用dmp

比较数据透视表中计算字段中的两列错误

使用另一个表中的数据创建计算列

散列表的平均查找长度怎么计算?

如何把一个excel表中的公式粘贴到另一张表上?我用的2007版本的。

计算结果表中的其他列时如何显示列?