表t_dept(dept_id,dept_name)
表t_emp(e_id,dept_id,e_name)
表t_user(u_id,e_id,u_name)
大致关系就是这样,表t_emp引用t_dept中的dept_id,表t_user引用表t_emp中的e_id
现在我要删除表t_dept,要将下面有关联的数据备份,存储过程应该怎么写?

解决方案 »

  1.   

    使用on delete cascade
    SQL> create table tablec
      2  (c_id number(10) primary key,
      3   d_id number(10),
      4   name varchar2(10));
     
    Table created
    SQL> create table tableb
      2  (b_id number(10) primary key,
      3   c_id number(10) ,
      4   name varchar2(10));
     
    Table created
    SQL> alter table TABLEB
      2    add constraint TABLEB_CHECK1 foreign key (C_ID)
      3    references TABLEC (C_ID) on delete cascade;
     
    Table altered
    SQL>  create table tablea
      2  (a_id number(10) primary key,
      3   b_id number(10) ,
      4   name varchar2(10));
     
    Table created
    SQL> alter table TABLEA
      2    add constraint TABLEA_CHECK1 foreign key (B_ID)
      3    references TABLEB (B_ID) on delete cascade;
     
    Table altered
     
    SQL> insert into tablec values(1,1,'test');
     
    1 row inserted
     
    SQL> insert into tableb values(1,1,'test');
     
    1 row inserted
     
    SQL> insert into tablea values(1,1,'test');
     
    1 row inserted
     
    SQL> commit;
     
    Commit complete
     
    SQL> delete from tablec;
     
    1 row deleted
     
    SQL> commit;
     
    Commit complete
     
    SQL> select * from tableb;
     
           B_ID        C_ID NAME
    ----------- ----------- ----------
     
    SQL> select * from tablea;
     
           A_ID        B_ID NAME
    ----------- ----------- ----------
     
    SQL> 
      

  2.   

    如果用存储过程的话,先删除t_user,再删除t_emp,最后删除t_dept
      

  3.   

    现在知道t_dept中的dept_id,要根据这个dept_id得到e_id,再根据得到的e_id得到u_id,然后还要把t_user表备份,再按照这个顺序删除,怎么写存储过程?
    纠结了半天了T_T
      

  4.   

    现在知道t_dept中的dept_id,要根据这个dept_id得到e_id,再根据得到的e_id得到u_id,然后还要把t_user表备份,再按照这个顺序删除,怎么写存储过程?
    纠结了半天了T_T