首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL在Oracle 11 one中插入具有一对多关系的记录

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

Stack Overflow用户
提问于 2013-10-10 16:55:02
回答 1查看 660关注 0票数 0

我在Oracle 11g XE中有一个遗留模式。它有两个表(银行和银行分行有一个one-to-many relationship)。

银行表的简单结构:

代码语言:javascript
复制
BANK_CODE (VARCHAR2), BANK_NAME (VARCHAR2), MAIN_BANK_ADD (VARCHAR2) and

BANK_BRANCH表:

代码语言:javascript
复制
BANK_CODE (VARCHAR2), BRANCH_NAME (VARCHAR2), BRANCH_ADD (VARCHAR2)

因此,在表BANK_BRANCH中,列BANK_CODE是表银行的foreign key

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

这是非常麻烦的,因为有很多记录。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 18:04:11

您可以通过两个update语句(如果BANK_CODE对于表库是唯一的)来实现这一点,例如使用以下脚本:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19301756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档