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してマッピングし、.id を自動的に生成しましたsequence generator。これで、必要に応じて代理キーを持つ新しいテーブルができました。

レコードがたくさんあるのでとても面倒でした。

私の質問は、SQL (または PL/SQL) を使用してこれを行うにはどうすればよいかです。私はこの言語にあまり詳しくありません。ありがとう。

4

1 に答える 1

0

これは、たとえば次のスクリプトを使用して、2 つの更新ステートメント (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 に答える