2013-10-10 38 views
0

我在Oracle 11g XE中有一個傳統模式。它有兩張桌子(BANK和BANK BRANCH有one-to-many relationship)。在Oracle 11gXE中使用SQL插入具有一對多關係的記錄

的BANK表的簡單結構:

BANK_CODE (VARCHAR2), BANK_NAME (VARCHAR2), MAIN_BANK_ADD (VARCHAR2) and 

BANK_BRANCH表:

BANK_CODE (VARCHAR2), BRANCH_NAME (VARCHAR2), BRANCH_ADD (VARCHAR2) 

所以,在表BANK_BRANCH列BANK_CODE是foreign key表BANK。

我打算規範化架構中的所有表,以便它們都具有id。我已使用Hibernate並映射這些表的每個記錄,並自動生成帶有sequence generator的ID。所以,現在我有需要的代理鍵的新表。

這是非常繁瑣的,因爲有很多記錄。

我的問題是如何使用SQL(或PL/SQL)來做到這一點。我對這種語言不太熟悉。謝謝。

回答

0

您可以只用兩個更新語句使用此腳本實現這一點(如果BANK_CODE是表BANK是唯一的),例如:

ALTER TABLE BANK ADD ID NUMBER; 
ALTER TABLE BANK_BRANCH ADD BANK_ID NUMBER; 

CREATE SEQUENCE BANK_SEQ; 

UPDATE BANK 
SET ID = BANK_SEQ.NEXTVAL; 

UPDATE BANK_BRANCH t1 
SET BANK_ID = (SELECT ID FROM BANK t2 WHERE t1.bank_code = t2.bank_code); 

ALTER TABLE BANK ADD CONSTRAINT BANK_ID_UK UNIQUE (ID); 

ALTER TABLE BANK_BRANCH ADD CONSTRAINT BANK_BRANCH_BANK_ID_FK FOREIGN KEY (BANK_ID) REFERENCES BANK(ID); 
+0

它的工作原理。感謝,並有一個愉快的一天。 – yovan786

相關問題