我向数据库中插入一条数据,并同时获得他的ID字段值,该如何做比较好,只有ID才是唯一标识的字段,是用序列和触发器自动产生的。

解决方案 »

  1.   

    既然id是用序列生成的那就很好办了,sequence.currval就是你的id号了,然后select
    记住oracle的多版本特性,只有当前用户可以看到没有提交的数据,要是其他用户只能看到提交后的数据
      

  2.   

    我想大家是没有理解到我的意思,
    比如现在有两张表,
    A:STU_ID,STU_NAME,STU_BIRTHDAY (这是学生信息表)
    B:STU_ID,COU_ID (这是学生选课关系表)
    C:COU_ID,COU_NAME,COU_TEACHER (这是课程信息表)现在要插入一条学生信息,同时要给这个学生 选课。如果按照常规的方法,先插入学生信息,然后再建立选课关系。但是建立关系时必须要有刚插入的学生ID,如果是先INSERT 之后再通过 SELECT MAX(STU_ID) 或者 SELECT SEQUERNCE.CURRVAL 这样或得的STU_ID 是可靠的吗?,如果在插入学生信息之后,别人又插入一条信息,然后你再读出STU_ID,这样肯定就有问题了。我的问题就是这样,不知道描述清楚了没有。
      

  3.   

    在插入新的学生信息,而没有建立选课关系时不让在插入新的学生信息,或这时候插入的数据不commit先???
      

  4.   

    这样是基础的问题。在pl/sql中是可以解决的。 我相信你的程序是需要用到pl/sql的.
    如果你的是11g版本可以这样写:
    declare
       i  pls_integer;
    begin
       i:=SEQUERNCE.nextval;
       --插入学生记录
       --插入选课记录.
    end;
    如果是10g以及10g以前版本,用select SEQUERNCE.nextval into i from dual;替换i:=SEQUERNCE.nextval;--
    具体的语句以及如何编写可变通,反正是这个意思,应是lz没有理解序列。
      

  5.   

    如果不存在并发操作的话是可靠的,否则就不可靠了
    建议把一系列操作放在一个事务里面完成,用存储过程或pl/sql实现