新建一张表主键id自增,请问下当我插入一条数据时我怎么获取他的自增id的值,(采用jdbc技术 存储过程怎么写)
解决方案 »
- 数据组合的超难问题。请高手指教~
- 数据库里明明有数据,为何查询出来没数据?
- 一个很急切的问题,明天就交作业了
- win7下安装Toad for Oracle 9.7报错
- 怎样在查询记录时给记录加锁?
- 十万火急!!!在线!!!
- oracle9i能否只在一个分区表的某个分区上建索引
- 一个很奇怪的问题,我在数据窗口里同时插进去id(为主键)为1和10的记录,则提示说违反唯一性,如果先插进去id为1的记录,再保存,然后插
- 急需一套delphi+oracle的程序學習﹖大家關注一下
- 请问ORACLE里面的查询包含子字符串位置的函数是什么?就象SQL SERVER里的CHARINDEX()
- oracle两张数据表的抽去问题
- 求一条 SQL 语句 20 分
如:
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
<selectKey resultClass="int" keyProperty="id" type="pre">
<![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL]]>
</selectKey>
<![CDATA[insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values(#id#,#description#)]]>
</insert>
你写段JDBC代码,通过查询语句去获取新插入的ID啊
select id from 表 where .....(插入新的值去获取该值对应的ID)
具体哪个方法忘了。
sequence.nextval -表示序列的下一个值
sequence.currval -表示序列的当前值可以这样实现你的需求
1. cid = sequence.nextval
2 insert (id,...) values(cid,...)
id number(18,0),
name varchar2(30));
create sequence test_seq start with 1 increment by 1 nomaxvalue nocycle;CREATE OR REPLACE PROCEDURE test_op_proc( v_name varchar2, v_sid out number)
as
begin
select test_seq.nextval into v_sid from dual;
insert into test(id,name) values (v_sid, v_name);
commit;
end;
/set serveroutput on;
var c_sid number;
exec test_op_proc('luoyoumoou',:c_sid);
print c_sid;
select * from test;
id number(18,0),
name varchar2(30));
create sequence test_seq start with 1 increment by 1 nomaxvalue nocycle;CREATE OR REPLACE PROCEDURE test_op_proc( v_name varchar2, v_sid out number)
as
begin
-- select test_seq.nextval into v_sid from dual; -- Oracle 10g (用这条语句代替下一条语句)
v_sid := test_seq.nextval; -- Oracle 11g (用这条语句代替上一条语句,以提高执行效率!)
insert into test(id,name) values (v_sid, v_name);
commit;
end;
/set serveroutput on;
var c_sid number;
exec test_op_proc('luoyoumoou',:c_sid);
print c_sid;
select * from test;
declare
v_id int;begin
insert into t1 values(s_id.nextval,'1') returning id into v_id;
dbms_output.put_line(v_id);end;
使用jdbc绑定:v_id即可得到insert的值。