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

时间:2017-09-11 06:24:11

标签: sql db2 ibm-cloud

我不认为这是可能的,或者它是有道理的,但是这里的大多数人都比我更聪明,从来没有伤害过要求。是否可以在作为公式的数据库中创建表。我不是指查询。我的意思是,让我说我有一张桌子,其中一列是"价格"另一个是"数量"我想要一个专栏"费用"计算(价格*数量)....导入数据时。以后我可以这样做:

从表中选择*;

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

4 个答案:

答案 0 :(得分:3)

您可以将费用列的默认值设置为

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  

答案 1 :(得分:1)

尝试使用触发器。你有一个教程: https://www.tutorialspoint.com/db2/db2_triggers.htm

  

数据库触发器是自动执行的过程代码   回应某些事件

答案 2 :(得分:1)

您可以使用计算列来执行操作。在计算列中,您将默认公式为

ALTER TABLE <TABLENAME> ADD <COLUMN_NAME> AS (<COLUMN_NAME1> * <COLUMN_NAME2>);

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

示例

  1. 交易(导致可能死锁)
  2. 触发器(可能导致服务器速度变慢)
  3. 存储过程(使用select子句的正常插入语句)
  4. 如果没有Store程序,我们可以使用普通的insert语句进行查询。
  5. 示例:

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

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

答案 3 :(得分:0)

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

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