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

时间:2018-11-19 03:22:35

标签: oracle oracle11g create-table

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

1 个答案:

答案 0 :(得分:1)

实现此功能的方法很少,其中一种是使用行级别Trigger

但是,我建议您使用View,因为仅存储可从另一个表生成的值并不总是值得拥有一个表。

创建视图

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

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

   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