【问题标题】:Calculate column value and insert another table计算列值并插入另一个表
【发布时间】:2016-11-15 17:07:15
【问题描述】:

我创建了两个表depositfinal_balance;我想在deposit 表中求和deposit_amount 并将结果插入到final_balance 表中。 我可以使用触发器吗?

CREATE TABLE deposit(cust_id VARCHAR2(10),loan_id VARCHAR2(10),deposit_type VARCHAR2(10),deposit_amount NUMBER(20));
INSERT INTO deposit values ('001CUS1','001LOAN1','Fixed',3500);
INSERT INTO deposit values ('001CUS2','001LOAN2','Fixed',3900);
INSERT INTO deposit values ('001CUS3','001LOAN3','Fixed',7000);
INSERT INTO deposit values ('001CUS4','001LOAN4','Fixed',28000);
INSERT INTO deposit values ('001CUS5','001LOAN5','Fixed',15200);
INSERT INTO deposit values ('001CUS6','001LOAN6','Fixed',2420);
INSERT INTO deposit values ('001CUS7','001LOAN7','Primary',2420);
INSERT INTO deposit values ('002CUS1','002LOAN1','Primary',27000);
INSERT INTO deposit values ('002CUS2','002LOAN2','Primary',20200);
INSERT INTO deposit values ('002CUS3','002LOAN3','Primary',6900);
CREATE TABLE final_balance(
total_deposit NUMBER(20)
);

【问题讨论】:

  • 创建视图会更好吗?想想看。每次这 2 列更改时,您都应该升级表 final_balance。我假设您想要一些报告,然后查看比表格更好的解决方案。
  • 请发布您尝试过的内容。当您修改存款表中的数据时,您是否需要自动更新您的 final_balance 表?或者您是否需要一次性评估结果,而不需要处理存款表上的修改?
  • 我想对总存款金额求和并在总存款字段中插入最终余额表#evgeniyK
  • 是的,我需要在修改存款表中的数据时自动更新 final_balance 表,#Evgeniy K
  • @brids 答案:是的,您可以使用触发器。我不喜欢这个解决方案。我更喜欢 mv 或简单视图。这也意味着如果您想为作为简单查询结果的单行创建表,那么 smt 对您的数据库设计是错误的。

标签: sql oracle oracle11g triggers


【解决方案1】:

如果需要一次性评估,可以使用:

SQL> insert into final_balance
  2    select sum(deposit_amount)
  3    from deposit;

1 row created.

如果您需要自更新结果,视图会是更好的解决方案:

SQL> CREATE VIEW v_final_balance(total_deposit) as
  2  select sum(deposit_amount)
  3    from deposit;

View created.

一开始,它们都显示相同的结果:

SQL> select * from final_balance;

TOTAL_DEPOSIT
-------------
       116540

SQL> select * from v_final_balance;

TOTAL_DEPOSIT
-------------
       116540

更新deposit表中的数据后,视图会显示更新后的总量,无需触发器:

SQL> INSERT INTO deposit
  2       VALUES (
  3               'XX',
  4               'YY',
  5               'ZZ',
  6               1000000000
  7              );

1 row created.

SQL> select * from final_balance;

TOTAL_DEPOSIT
-------------
       116540

SQL> select * from v_final_balance;

TOTAL_DEPOSIT
-------------
   1000116540

您甚至可以使用基于触发器的方法,但它需要用于插入、更新、删除的触发器,从而导致更复杂的解决方案。如果您对触发器没有特定需求,我相信视图是最好的解决方案。

【讨论】:

  • 亲爱的 Aleksej,这是一个聪明的解决方案,谢谢,但我可以使用与普通表相同的视图表吗?并连接前端报告?实际上我想创建一个所有计算完成都是后端的项目。我可以使用触发??
  • 您可以在 select 语句中使用视图,就像它是一个表一样。
  • 我是新学生,请原谅我的解释,
  • 你好-Aleksej,我成功创建了视图,现在我可以创建另一个视图了吗?使用减法(v_final_balance-final_balance),我可以百分比操作吗?我可以对一个视图进行求和、减法、乘法?
  • 您可以像执行选择查询一样创建视图;无论您在选择中可以做什么(总和、减法、百分比,...),您都可以在视图中进行
猜你喜欢
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多