我在Oracle 11g XE中有一个遗留模式。它有两个表(银行和银行分行有一个one-to-many relationship)。
银行表的简单结构:
BANK_CODE (VARCHAR2), BANK_NAME (VARCHAR2), MAIN_BANK_ADD (VARCHAR2) andBANK_BRANCH表:
BANK_CODE (VARCHAR2), BRANCH_NAME (VARCHAR2), BRANCH_ADD (VARCHAR2)因此,在表BANK_BRANCH中,列BANK_CODE是表银行的foreign key。
我计划对架构中的所有表进行规范化,以便它们都有一个id。我使用了Hibernate并映射了这些表的每个记录,并使用sequence generator自动生成ids。所以,现在我有了新的表,并根据需要使用代理键。
这是非常麻烦的,因为有很多记录。
我的问题是如何使用SQL (或PL/SQL)来实现这一点。我对这种语言不太熟悉。谢谢。
发布于 2013-10-10 18:04:11
您可以通过两个update语句(如果BANK_CODE对于表库是唯一的)来实现这一点,例如使用以下脚本:
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);https://stackoverflow.com/questions/19301756
复制相似问题