2013-10-21 58 views
1

與現有的表可能關係中的主鍵我有一個具有以下許多記錄的表T1創建一個表,有一個在Oracle

ID NAME TITLE .... 

1 abc X1 
2 xyz X1 
3 qwe X1 
4 asd X2 
5 pqr X2 

我想創建一個具有新表t2一個主鍵,它在t1中引用一個新的外鍵。此外,t2中的列「title」的信息是不同的,因此,在t2中添加的任何記錄應該反映在t1中,並且刪除應該從t1到t2級聯。

我也做了以下內容:

create table t2 AS SELECT distinct (title) FROM t1; 

ALTER TABLE t2 
ADD (s_id,column1,column 2); 

alter table t2 add primary key (s_id); 

create sequence s_seq 
start with 1 
increment by 1 
nomaxvalue; 

update t2 set s_id=s_seq.nextval; 


ALTER TABLE t1 
add constraint fk_s_id 
FOREIGN KEY (f_t2) 
REFERENCES t2(s_id) on delete cascade; 

在級聯並把這個不工作。 請提供幫助。

回答

1

我錯過了如何創建f_t2需要在一個點上添加到t1。所以我添加並填充了列f_t2,它工作。

ALTER TABLE t1 
ADD (f_t2 number); 
update t1 set f_t2 = (select s_id from t2 where t2.title = t1.title); 

運行以下步驟會產生所需的結果。

drop table t1; 
create table t1 (id number,name varchar2(100), title varchar2(100)); 
insert into t1 values (1, 'abc', 'X1'); 
insert into t1 values (2, 'xyz', 'X1'); 
insert into t1 values (3, 'qwe', 'X1'); 
insert into t1 values (4, 'asd', 'X2'); 
insert into t1 values (5, 'pqr', 'X2'); 
drop table t2; 
create table t2 AS SELECT distinct (title) FROM t1; 
ALTER TABLE t2 
ADD (s_id number,column1 varchar2(10),column2 varchar2(20)); 
drop sequence s_seq; 
create sequence s_seq 
start with 1 
increment by 1 
nomaxvalue; 
update t2 set s_id=s_seq.nextval; 
alter table t2 add primary key (s_id); 
ALTER TABLE t1 
ADD (f_t2 number); 
update t1 set f_t2 = (select s_id from t2 where t2.title = t1.title); 
select * from t1; 
select * from t2; 
ALTER TABLE t1 
add constraint fk_s_id 
FOREIGN KEY (f_t2) 
REFERENCES t2(s_id) on delete cascade; 
delete from t2 where title='X2'; 
select * from t1; 
select * from t2; 

輸出:

table T1 dropped. 
table T1 created. 
1 rows inserted. 
1 rows inserted. 
1 rows inserted. 
1 rows inserted. 
1 rows inserted. 
table T2 dropped. 
table T2 created. 
table T2 altered. 
sequence S_SEQ dropped. 
sequence S_SEQ created. 
2 rows updated. 
table T2 altered. 
table T1 altered. 
5 rows updated. 
     ID NAME                         TITLE                          F_T2 
---------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------- 
     1 abc                         X1                           1 
     2 xyz                         X1                           1 
     3 qwe                         X1                           1 
     4 asd                         X2                           2 
     5 pqr                         X2                           2 

TITLE                          S_ID COLUMN1 COLUMN2    
---------------------------------------------------------------------------------------------------- ---------- ---------- -------------------- 
X1                           1         
X2                           2         

table T1 altered. 
1 rows deleted. --- DELETE in T2 affects T1 
-- THIS IS T1: 
      ID NAME                         TITLE                          F_T2 
    ---------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------- 
      1 abc                         X1                           1 
      2 xyz                        

    X1                           1 
      3 qwe                         X1                           1 
-- THIS IS T2:  
    TITLE                          S_ID COLUMN1 COLUMN2    
    ---------------------------------------------------------------------------------------------------- ---------- ---------- -------------------- 
    X1                           1         
+0

thanks..but問題是部分solved.I已經有表T1 populated..so從T2插件不會回報爲T1。刪除工作但是。 –