【问题标题】:how to update multiple tables in oracle DB?如何更新oracle DB中的多个表?
【发布时间】:2010-06-04 13:38:55
【问题描述】:

我在我的 oracle 10g 中使用了两个表。第一个表有关键字,count,id(主键),我的第二个表有 id,timestamp..

但我在第一个表(关键字,计数)中进行任何更改,它将反映在我的第二个表时间戳上。我使用 id 作为两个表的参考...

table1:

CREATE TABLE Searchable_Keywords
(KEYWORD_ID NUMBER(18) PRIMARY KEY,
KEYWORD VARCHAR2(255) NOT NULL,
COUNT  NUMBER(18) NOT NULL,
CONSTRAINT Searchable_Keywords_unique UNIQUE(KEYWORD)
);

table2:

CREATE TABLE Keywords_Tracking_Report
(KEYWORD_ID NUMBER(18),
PROCESS_TIMESTAMP TIMESTAMP(8) 
);

如何通过引用另一个表来更新一个表..

请帮帮我...

【问题讨论】:

  • 为什么您的第二个表 (Keywords_Tracking_Report) 存在?你不能只将列 PROCESS_TIMESTAMP 添加到第一个表 (Searchable_Keywords) 中吗?
  • 它降低了第一个表的性能..在第一个表中我只需要关键字和计数...因为我想要性能。只有管理员只能访问时间戳......

标签: oracle oracle10g oracle11g


【解决方案1】:

在 table1 上使用 after insert 或 update 触发器来管理 table2。

【讨论】:

  • +1:虽然我讨厌触发器,并且更喜欢将其封装在存储过程中...
【解决方案2】:

您可以使用而不是触发器来执行此操作。

为此,您遵循以下流程

SQL> create or replace view v_for_update
2 as
3 select e.keyword,d.id,e.count
4 from Keywords_Tracking_Report  e, Keywords_Tracking_Report  d
5 where e.id=d.id
6 /

视图已创建。

SQL> create or replace trigger tr_on_v_for_update
2 instead of update on v_for_update
3 begin
4
5 update Keyword_table set Keyword= :new.Keyword, count= :new.count
6 where id=:old.id;
7
8 update Keywords_Tracking_Report set timestamp= :new.timestamp
9 where id=:old.id;
12
13 end;
14 /

触发器已创建。

现在使用单个 sql 语句可以更新多个表

 SQL> update v_for_update set keyword='xyz',count = 2, timestamp = sysdate
 where id=1;

【讨论】:

  • 这个视图是必要的,因为我只用这个视图更新了多个表。这是更新多个表的一种方法
猜你喜欢
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 2011-05-04
  • 2012-06-11
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多