Создать поле таблицы в Oracle с использованием значения подзапроса по умолчанию - PullRequest
0 голосов
/ 19 ноября 2018
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 голосов
/ 19 ноября 2018

Есть несколько способов реализовать это, и одним из них является использование уровня строки 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;
/

Демо

...