0

我在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 是foreign key表 BANK 的一个。

我计划对模式中的所有表进行规范化,以便它们都有一个id. 我已经使用Hibernate并映射了这些表的每条记录,并自动生成了带有sequence generator. 所以,现在我有了新表,其中包含所需的代理键。

这很麻烦,因为有很多记录。

我的问题是如何使用 SQL(或 PL/SQL)来做到这一点。我对这种语言不太熟悉。谢谢。

4

1 回答 1

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);
于 2013-10-10T18:04:11.167 回答