Oracle 10g将主键添加为现有表的序列

时间:2012-11-15 18:48:20

标签: sql oracle oracle10g

我有三张桌子 - 会员,付款,奖励超过3000条记录。  目前,成员表具有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都为null,所以我更新了列

       Update member 
       Set mem_id =  mem_seq.nextval
       Where mem_id IS NULL;
    

到目前为止它运作良好,现在我的挑战是将外键添加到Payment表以及Award表   - 在付款表

中创建了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 需要帮助来解决这个问题。

1 个答案:

答案 0 :(得分:1)

尝试使用以下

更新PAYMENT表
update payment p set p.mem_id  = (select mem_id from member where 
memberid = p.memberid);