oracle数据库中有建立主外键关系的两张表,主表和明细表,例如订单和订单明细 
        主表:       OrderID  主键
                     其它字段略 
        明细表:      OrderID:外键 
                     其它字段图         现在要向表中插入数据,主表中1条,明细表中5条。
        向明细表中插数据时,提示违反主外键约束, 
     在用事务处理 时 该怎么写 Sql 语句呢 ?
        
        请教各位帮忙解决一下 !!!!

解决方案 »

  1.   

    有这个外键约束的话,你的明细表的ORDERID 这个字段在主表里必须有改记录才可以哈
    事物:无碍乎就是你执行的语句 必须完全成功执行 提交,只要有一条无法执行将全部回滚。
      

  2.   

    恩  在主表中 ID 是自动增长序列 我在向主表中 插入一条后 再怎么写 向明细表中 插入5条记录的语句呢 (明细表中外键非空 怎么获取得到 要插入的与主表中相匹配关联的ID 号?)
      

  3.   

    你主表中应该有自增长的唯一标识吧!
    那么你在主表插入的语句中加入select @@identity 获得最新自增长的ID
    这iD就是明细表的外键了
      

  4.   

    很简单哈。
    如果你主表的ID是自动增长的话 我觉得不是一个很好的解决方法,毕竟自动增长在程序里面不好控制。
    比方你 获取最大记录数+1 万一你有删除的数据呢,这样不准确。
    采用 COUNT 的方法更不合适。
    建议采用.NET 自带方法 GUID 生成主表的ID  然后用一个变量保存起来。
    明细表插入数据的时候不就可以引用主表的ID 了  然后就循环SQL语句 呗。试下。
      

  5.   


    多谢提醒 这个读取解决了 oracle中的 是自增序列 sequence 读取当前的CURRVAL 值 是当前插入记录 的号。 不过该怎么保证与明细表中后插入相关联数据10条匹配一致呢 ?也就是在多线操作时 会不会是读取的这个号 可能就是别人刚刚插入的值了 该怎么处理多线是这样的问题呢 ?多线时 加锁处理该怎么实现呢?