Java 使用SQL在Oracle 11gXE中插入具有一对多关系的记录
我在Java 使用SQL在Oracle 11gXE中插入具有一对多关系的记录,java,sql,oracle,hibernate,Java,Sql,Oracle,Hibernate,我在oracle11gxe中有一个遗留模式。它有两个表(银行和银行分行具有一对多关系) 银行表的简单结构: BANK_CODE (VARCHAR2), BANK_NAME (VARCHAR2), MAIN_BANK_ADD (VARCHAR2) and 银行分行表: BANK_CODE (VARCHAR2), BRANCH_NAME (VARCHAR2), BRANCH_ADD (VARCHAR2) 因此,在表BANK\u BRANCH中,列BANK\u CODE是表BANK的外键 我计划规
oracle11gxe
中有一个遗留模式。它有两个表(银行和银行分行具有一对多关系)
银行表的简单结构:
BANK_CODE (VARCHAR2), BANK_NAME (VARCHAR2), MAIN_BANK_ADD (VARCHAR2) and
银行分行表:
BANK_CODE (VARCHAR2), BRANCH_NAME (VARCHAR2), BRANCH_ADD (VARCHAR2)
因此,在表BANK\u BRANCH中,列BANK\u CODE是表BANK的外键
我计划规范化模式中的所有表,以便它们都具有id
。我使用了Hibernate
并映射了这些表的每条记录,并使用序列生成器自动生成了id。所以,现在我有了需要的带有代理键的新表
因为有很多记录,所以很麻烦
我的问题是如何使用SQL(或PL/SQL)实现这一点。我对这种语言不太熟悉。谢谢。您可以通过两条更新语句(如果BANK_代码对于表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);