【问题标题】:Formula / Calculation columns in a database table数据库表中的公式/计算列
【发布时间】:2017-09-11 06:24:10
【问题描述】:

我不认为这是可能的,也不认为这是有道理的,但这里的大多数人都比我聪明得多,而且问也无妨。是否可以在作为公式的数据库中创建表。我的意思不是查询。我的意思是,假设我有一张表,其中一列是“价格”,另一列是“数量”,我想要一列“成本”来计算(价格 * 数量)......因为数据被导入。这样以后我就可以:

从表中选择 *;

如果你告诉我这是一个愚蠢的问题,我会理解的,但我是从内部客户那里得到的,需要进行调查。我运行的数据库是 BlueMix 上的 DB2。

【问题讨论】:

    标签: sql db2 ibm-cloud


    【解决方案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>);
    

    因此,上述查询仅用于您想要添加该列的同一张表。 如果要添加另一个表,有很多方法。

    例子

    1. 事务(可能导致死锁)
    2. 触发器(可能会导致服务器变慢)
    3. 存储过程(使用 select 子句的普通插入语句)
    4. 没有存储过程,我们可以用普通的插入语句正确查询。

    例子:

    CREATE TABLE Cost_Table
    (
    Cost int
    );
    
    INSERT INTO Cost_Table (Cost)<BR>
    SELECT price * quantity FROM Table_name;
    

    这是优化的方式。因此,我们可以使用上面的查询而不是触发器。 因此上面的查询在事务和存储过程中使用。

    【讨论】:

      【解决方案4】:

      如果您不小心,可能会导致严重的安全漏洞。查找“SQL 代码注入”。

      但要做到这一点,另一条路线可能是在存储过程中使用EXECUTE IMMEDEATE

      【讨论】:

        猜你喜欢
        • 2011-03-14
        • 2022-11-15
        • 1970-01-01
        • 2020-11-16
        • 2014-01-12
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多