select INFO_ID fro ptl_info where rowid=max(rowid)
SORRY 应该 是 select INFO_ID fro ptl_info where rowid=(select max(rowid) from ptl_info where )
select INFO_ID fro ptl_info where rowid=(select max(rowid) from ptl_info )
comcn(大XX)还是有点小问题啊:) “fro”
select PTL_INFO_ID.currVAL from dual就可以了.
最好用select INFO_ID from PTL_INFO where rowid=(select max(rowid) from PTL_INFO);因为用select PTL_INFO_ID.currval from dual;的话,当多用户操作时,有可能别人或其它进程会使PTL_INFO_ID.currval 的值发生变化
建议用 select INFO_ID from PTL_INFO where rowid=(select max(rowid) from PTL_INFO); 采用 select PTL_INFO_ID.currVAL from dual的时候,如果你取过一个值后,就可能已经修改了PTL_INFO_ID.currVAL当前值,而不是刚插入的INFO_ID。 其实 做好的做法是,你先取出PTL_INFO_ID.NEXTVAL的值,然后,再提交保存!
应该 是
select INFO_ID fro ptl_info where rowid=(select max(rowid) from ptl_info where )
select INFO_ID from PTL_INFO where rowid=(select max(rowid) from PTL_INFO);
采用
select PTL_INFO_ID.currVAL from dual的时候,如果你取过一个值后,就可能已经修改了PTL_INFO_ID.currVAL当前值,而不是刚插入的INFO_ID。
其实
做好的做法是,你先取出PTL_INFO_ID.NEXTVAL的值,然后,再提交保存!
这时,该ID会丢失 ( * 这是ORACLE序列的特性).2.将该ID 赋给变量.
3.INSERT 变量值. 问题解决. :)
select PTL_INFO_ID.currval from dual;最合适,他取到的就是这个session里最近一次被使用的ID值
其他的session(其他的连接)使用PTL_INFO_ID.NEXTVAL不会影响这个session里 PTL_INFO_ID.currval的值,只有本session使用了PTL_INFO_ID.NEXTVAL才会改变该session中PTL_INFO_ID.currval的值
不信你可以自己试
例子如下:-- Oracle9i for Linux命令行一:SQL> SELECT seq_1.Currval FROM DUAL; CURRVAL
----------
26SQL> SELECT seq_1.nextval FROM DUAL; NEXTVAL
----------
28SQL> SELECT seq_1.Currval FROM DUAL; CURRVAL
----------
28SQL> 命令行二:SQL> SELECT seq_1.currval from dual; CURRVAL
----------
27SQL> SELECT seq_1.nextval from dual; NEXTVAL
----------
29SQL> SELECT seq_1.currval from dual; CURRVAL
----------
29SQL>
另外:
SQL> SELECT seq_1.nextval,seq_1.currval FROM DUAL; NEXTVAL CURRVAL
---------- ----------
30 30SQL>
以前我也碰到这样的问题,都是按照 aran11(阿然) 的方法做的呵呵
insert into table_name(col1,
col2,.....)
values(val1,
val2,......)
returning val1,var2..... into var1,var2....