如何在oracle数据库中更新多个表?

如何在oracle数据库中更新多个表?,oracle,oracle10g,oracle11g,Oracle,Oracle10g,Oracle11g,我在oracle 10g中使用了两个表。第一个表有关键字count,id(主键),第二个表有id timestamp 但是我在第一个表中做任何更改(关键字,计数),它将反映在我的第二个表时间戳上。。我使用id作为两个表的参考 表1: CREATE TABLE Searchable_Keywords (KEYWORD_ID NUMBER(18) PRIMARY KEY, KEYWORD VARCHAR2(255) NOT NULL, COUNT NUMBER(18) NOT NULL, CONS

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

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

表1:

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)
);
CREATE TABLE Keywords_Tracking_Report
(KEYWORD_ID NUMBER(18),
PROCESS_TIMESTAMP TIMESTAMP(8) 
);
表2:

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)
);
CREATE TABLE Keywords_Tracking_Report
(KEYWORD_ID NUMBER(18),
PROCESS_TIMESTAMP TIMESTAMP(8) 
);
如何使用另一个表的引用更新一个表


请帮助我……

在表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;

为什么存在第二个表(关键字跟踪报告)?您不能将列PROCESS\u TIMESTAMP添加到第一个表(可搜索的\u关键字)中吗?它会降低第一个表的性能。。在第一个表中,我只需要关键字和计数…因为我需要性能。只有管理员才能访问时间戳…+1:虽然我讨厌触发器,但更喜欢将其封装在存储过程中…此视图是必需的,因为我仅使用此视图更新多个表。这是一种更新多个表的方法