这样是基础的问题。在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没有理解序列。
记住oracle的多版本特性,只有当前用户可以看到没有提交的数据,要是其他用户只能看到提交后的数据
比如现在有两张表,
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,这样肯定就有问题了。我的问题就是这样,不知道描述清楚了没有。
如果你的是11g版本可以这样写:
declare
i pls_integer;
begin
i:=SEQUERNCE.nextval;
--插入学生记录
--插入选课记录.
end;
如果是10g以及10g以前版本,用select SEQUERNCE.nextval into i from dual;替换i:=SEQUERNCE.nextval;--
具体的语句以及如何编写可变通,反正是这个意思,应是lz没有理解序列。
建议把一系列操作放在一个事务里面完成,用存储过程或pl/sql实现