首先,解决数据id自增问题 创建一个序列sequence(sequence详解可从网上搜一下,这里不赘述) create sequence SEQ_test minvalue 1 maxvalue 99999999999999999999999999 start with 21 increment by 1 cache 20; 序列sequence有两个固有属性nextval(下一个值)和currval(当前值) 这样在插入数据的sql语句中可以自动获取自增的id值:insert into test(id,name) values(seq_test.nextval,'name1') 插入完毕后,就可以获取该id值了:select seq_test.currval from dual 注意:序列的currval属性只有在插入语句insert完毕后形成短暂记录,所以必须在下一次数据库操作之前获取该值,否则失效无法获得,为了解决这一问题,我们可以通过创建存储过程来及时获取该值。 然后,创建存储过程,实现插入和获值操作
为了实现该存储过程的可扩展性,存储过程的参数包括三个:strInsertSQL(传递insert语句),seqName(获取序列的名称),ID(输出值,获取id) 复制代码 代码如下: create or replace procedure p_GetItemID( strInsertSQL varchar2, seqName varchar2, ID out varchar2 ) is strSql varchar(200); begin execute immediate strInsertSQL;--执行插入语句 strSql:='select '||seqName||'.currval from dual';--获取id的sql语句 execute immediate strSql into ID;--执行获取id的sql语句 EXCEPTION WHEN OTHERS THEN DBMS_output.PUT_LINE(SQLERRM); end p_GetItemID;