使用默认子查询值在 oracle 中创建 table 字段

Create table field in oracle with default subquery value

SQL> select * from table1;

PRICES
----------
   300
   520
   220
   820
   350
   790
   247

CREATE TABLE2 (DESCRIPT VARCHAR2(10), TOTALPRICES NUMBER(10) DEFAULT 
                                                 (SELECT SUM(PRICES) FROM TABLE1);

我想要那样的东西,当我

INSERT INTO TABLE2 VALUES ('TOTAL OF DAY');     
SELECT * FROM TABLE2;

我想要显示:

 DESCRIPT        TOTALPRICES
--------------   -----------
 TOTAL OF DAY       3247

实现这一点的方法很少,其中一种是使用行级别 Trigger

但是,我建议您使用 View,因为仅仅为了存储可以从另一个 table.[=16 生成的值而使用 table 并不总是值得的=]

创建视图

CREATE OR REPLACE VIEW v_table1 as select  'TOTAL OF DAY' as DESCRIPT
, SUM(prices)  as TOTALPRICES
FROM Table1;

这使您可以简单地查询视图,并且将从基础 tables 生成值。

   select * from v_table1;

如果觉得视图的底层查询可能比较慢,可以将其转换成物化视图。

触发器 应该是您最后的选择。

CREATE OR REPLACE TRIGGER tr_table2  BEFORE INSERT ON Table2
FOR EACH ROW
BEGIN

 SELECT SUM(PRICES) INTO :NEW.TOTALPRICES FROM Table1;

END;
/

Demo