【发布时间】:2012-11-04 10:37:30
【问题描述】:
我有三张表——会员、付款、奖励,上面有超过 3000 条记录。 目前Member 表有memberId 作为主键,memberid 是Payment 和Award 表的外键。注意 memberid 不是自动生成的字段。这些表是在 Access 中创建的。 我的工作是迁移到 Oracle 并添加主键,比如 mem_id 作为序列号到 Member 表,并将 mem_id 作为外键添加到 Payment 和 Award 表。
- 我已经迁移了 Oracle 中的表。
-
将列名mem_id添加到成员表中
alter table member add mem_id number Unique; -
创建了一个序列
create Sequence Mem_seq START WITH 1 MAXVALUE 999999999 MINVALUE 1 NOCYCLE NOCACHE NOORDER; -
由于所有记录的 mem_id 为空,我更新列
Update member Set mem_id = mem_seq.nextval Where mem_id IS NULL;
到目前为止效果很好,现在我的挑战是将外键添加到付款表和奖励表 - 在 Payment 表中创建 mem_id 列
alter table PAYMENT
add mem_id number Unique;
我的想法是更新付款表中的
mem_id-
更新语句是
update PAYMENT set PAYMENT.mem_id = MEMBER.mem_id where PAYMENT.memberid = MEMBER.memberid;
我收到错误ORA-00904 member.memberid: invalid identifier
需要帮助来解决这个问题。
【问题讨论】:
-
为什么不继续使用memberid呢?将序列的
start with值设置为max(memberid) + <<something>>。并且现有记录可以保持其键值不变。