使用默认子查询值在 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;
/
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;
/