使用SQL在Oracle 11gXE中插入具有一对多关系的记录

时间:2013-10-10 16:55:03

标签: java sql oracle hibernate

我在Oracle 11g XE中有一个旧架构。它有2个表(BANK和BANK BRANCH有one-to-many relationship)。

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列是表BANK的foreign key

我计划规范化架构中的所有表,以便它们都有id。我使用了Hibernate并映射了这些表的每条记录,并使用sequence generator自动生成了ID。所以,现在我有了根据需要使用代理键的新表。

由于记录很多,这非常麻烦。

我的问题是如何使用SQL(或PL / SQL)执行此操作。我对这种语言不太熟悉。感谢。

1 个答案:

答案 0 :(得分: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);