我在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)执行此操作。我对这种语言不太熟悉。感谢。
答案 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);