2010-06-03 53 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

相關問題