如何在oracle sql中配置一列自动计算谁的信息在另一列?

ghhaqwfi  于 2023-06-22  发布在  Oracle
关注(0)|答案(1)|浏览(138)

我有这个事实表:

CREATE TABLE FACTPRODUCTSALES (
    TRANSACTIONID      NUMBER
        GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 )
    PRIMARY KEY,
    SALESINVOICENUMBER INT NOT NULL,
    SALESDATEKEY       NUMBER CONSTRAINT SALES_KEY_FK REFERENCES DIMDATE (DATEKEY),
    SALESTIMEKEY       NUMBER CONSTRAINT SALESTIME_KEY_FK REFERENCES DIM_TIME (TIMEKEY),
    STOREID            NUMBER NOT NULL CONSTRAINT STORE_ID_FK REFERENCES DIMSTORES (STOREID),
    CUSTOMERID         NUMBER NOT NULL CONSTRAINT CUSTOMER_ID_FK REFERENCES DIMCUSTOMER (CUSTOMERID),
    PRODUCTID          NUMBER NOT NULL CONSTRAINT PRODUCT_ID_FK REFERENCES DIMPRODUCT (PRODUCTKEY),
    SALESPERSONID      INT NOT NULL CONSTRAINT SALESPERSON_ID_FK REFERENCES DIMSALESPERSON ( SALESPERSONID ),
    QUANTITY          FLOAT,
    SALESTOTALCOST    INT as (DIMPRODUCT.PRODUCTSALESCOST * QUANTITY),
    PRODUCTACTUALCOST INT as (DIMPRODUCT.PRODUCTACTUALCOST * QUANTITY),
    DEVIATION         FLOAT
);

正如你在SALESTOTALCOSTPRODUCTACTUALCOST,中看到的,我希望每次在这个表中插入一些东西时,根据DIMPRODUCT.PRODUCTSALESCOSTDIMPRODUCT.PRODUCTACTUALCOST中的值自动计算它们的值,这取决于用户在DIMPRODUCT字段中插入的ID,当然,这段代码不会工作。
这可能吗?

4uqofj5v

4uqofj5v1#

一般来说,不要这样做。
或者:
1.创建一个VIEW,并通过连接两个表在视图中生成总计。
1.如果你想具体化数据,那么创建一个MATERIALIZED VIEW
1.使用(复合)触发器在修改依赖列时更新表。
您没有提供DIMPRODUCT表的详细信息,也没有提供这两个表之间的关系,因此无法提供代码。

相关问题