2010-06-03 54 views
0

我在oracle 10g中使用了两个表。第一个表具有关键字,计数,身份证(主键)和我的第二个表有ID,时间戳。如何更新oracle数据库中的多个表?

但我在第一个表中做任何chages(关键字,计数)它会反映在我的第二个表时间戳..我用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) 
); 

表2:

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

如何更新与另一个表的引用一个表..

帮我PLZ ...

+1

为什么你的第二个表(Keywords_Tracking_Report)存在吗?你不能只将PROCESS_TIMESTAMP列添加到第一个表(Searchable_Keywords)? – 2010-06-03 14:48:39

+0

它降低了表的性能..在第一个表中我只需要关键字和计数...因为我想performance.only管理员只能访问时间戳.... – murali 2010-06-04 04:53:41

回答

1

使用后table1中插入或更新触发器管理表2。

+1

+1:虽然我讨厌触发器,并且宁愿将其封装在存储过程中,而不是... – 2010-06-04 00:38:00

0

您可以使用代替触发器来执行此操作。

为此,您按照下面的过程中创建

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; 
+0

该视图是不必要的,只需在父表上创建触发器... – 2010-06-04 00:36:43

+0

此视图是必需的,因为我只是使用此视图更新多个表。这是更新多个表的一种方法 – Bharat 2010-06-04 08:36:11

相关问题