oracle数据库,表中有id(自增字段,主键), insert 语句插入一条记录后要求,返回当前插入记录的id値。

oracle 数 据 库,表中有id(自增字段,主键), insert 语句插入一条记录后要求,返回当前插入记录的id値。这个ID不是主ID,ID里的值是CASE_SEQ.Nextval一个自增序列,我想获得当前的插入的记录里的自增序列的值,有人说的方法如下:
create sequence CASE_SEQ
minvalue 0
maxvalue xxxxxxxx
start with 1
increment by 1
cache 20;
select CASE_SEQ.nextval from dual
这个放法正确吗?
如果正确那 asp 里面掉用怎么而写正确
string str = "insert into PATIENT_T(pid,name) values(CASE_SEQ.Nextval,'黎明')";
str += "Select CASE_SEQ.currval from dual";

OracleConnection conn = DB.getCon();
OracleCommand cmd = conn.CreateCommand();
conn.Open();
int returnID = 0;
cmd.CommandText = str;
returnID = Convert.ToInt32(cmd.ExecuteScalar());
//returnID = cmd.ExecuteNonQuery();
conn.Close();
有错误啊 正确的应该怎么改 希望大虾指点,谢谢!!!!
我想要得到 returnID 的值 先看sql 语句对吗?然后怎么在 asp中写具体调用的指令,和返回的值类型,还用强制转化吗? 本人是新手希望有人能够解答,最好考虑到获得的CASE_SEQ.Nextval的唯一性,考虑到有多个用户同时丛客户端写插入语句,怎么知道得到的ID就是自己刚才插入的自动序列ID,不会是别人的序列ID,谢谢了,本人新手!!!

sequence就是一个序列,你每次执行 select CASE_SEQ.nextval from dual 的时候都会返回唯一的一个ID号,因此你可以先执行这个select取到这个ID,如果这个时候有多个用户在执行这个操作,那么他们select到的ID绝对跟你的不一样(sequence就是保证这一点的)。然后你就可以用这个ID插入记录,然后再返回这个ID就OK了。
代码:
string sql = "Select CASE_SEQ.currval from dual";
OracleConnection conn = DB.getCon();
OracleCommand cmd = conn.CreateCommand();
conn.Open();
string returnID = null;
cmd.CommandText = sql;
returnID = Convert.ToString(cmd.ExecuteScalar()); //获取ID
sql = "insert into PATIENT_T(pid,name) values(returnID,'黎明')"; //将ID插入数据库
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
conn.Close();
结束了,差不多就是这样,楼主自己调试一下就行了,注意ID在数据库中应该是varcahr类型的
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-21
string str = "insert into PATIENT_T(pid,name) values(CASE_SEQ.Nextval,'黎明')";
str += "Select CASE_SEQ.currval from dual";

这是两条SQL语句,在并发的时候不能保证ID就是你想要的那个
方法1: 把你的方法定义成synchronized,或把数据库操作部分放到synchronized块中,JAVA中是这样,我想C#应该也差不多吧

方法2: Select CASE_SEQ.nextval from dual, 先取出序列的值,放到一个变量中,例如: pid
然后再插入表中
insert into PATIENT_T(pid,name) values(pid,'黎明')
剩下你自己可以完成了
第2个回答  2011-01-21
建议是 先 select CASE_SEQ.nextval from dual 读取到唯一的 新的ID, 保存到一个变量中。
然后用这个新的 ID, 插入到表中去.
insert into PATIENT_T(pid,name) values(变量,'黎明')

先 insert 后 Select CASE_SEQ.currval from dual 的话。
如果很短的时间内,有多个 INSERT 同时发生的话,可能会发生数据的冲突。

...插入一条信息返回当前信息的主键id 怎样写 oracle的数据库 主键序列...
insert into test(nid,test1) values(6,'aaa')insert into test(test1) values('bbb')

oracle怎么实现id自增和设置主键啊
before insert on book for each row begin select book_seq.nextval into :new.bookId from dual;end ;添加数据 insert into book(name) values ('cc');insert into book(name) values ('dd');commit;

oracle 如果存在主键则更新(update),否则添加新纪录(insert)怎么...
可以用merge语句。给你举个例子 CREATE OR REPLACE PROCEDURE test (in_deptno IN NUMBER, in_dname IN VARCHAR2, in_loc IN VARCHAR2)AS t_record scott.dept%ROWTYPE;BEGIN SELECT in_deptno, in_dname, in_loc INTO t_record FROM DUAL;---用merge语句 MERGE I...

oracle 实现主键id自增
通过利用Oracle数据库的序列功能,我们能够实现主键自动递增,避免了手动分配数值的繁琐过程,确保了主键的唯一性和自增性,从而提高了数据管理的效率与准确性。

oracle如何实现插如记录时ID自增
sql server中的ID是系统设定的,当我们插入数据时他会自己增加,但oracle没有,需要我们自己添加字段ID,由于ID设置成NOT NULL,插入数据库时就会失败,这样就需要插入数据库时实现这条记录ID自己自动增加,自己搜了一下,具体方法如下 假如将表li_line_fence sql server中的ID是系统设定的,当我们插入...

如何实现在Oracle插入一条记录返回主键
单纯sql语句里面没有这个语法。plsql里面有这个方法,具体示例:DECLARE v_id t.id%TYPE;BEGIN INSERT INTO t VALUES (t_seq.nextval, 'DDD')RETURNING id INTO v_id;COMMIT;DBMS_OUTPUT.put_line('ID=' || v_id);END;\/

oracle数据库,主键设置为ID,插入语句时,如何自动生成ID并让它顺序增加...
使用oracle数据库中的关键字sequence来实现目的。\/\/创建mySeq create sequence mySeqstart with 1increment by 2maxvalue 40minvalue 1cycle \/\/创建用户表 create table USER(Id int,CompName varchar2(20))插入语句可以这样写:insert into USER values(mySeq.nextVal,'AA')这样的话每次插入的ID就是...

...oracle 插入一条数据得到 他的自增长主键 tad_id
不用这么麻烦 只要 使用insert 的returning 即可满足需求

oracle数据库如何创建自增列的技巧教程
写个insert语句,插入一条记录,看ID字段自增了没,自增则OK啦。oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现。先建一个测试表了:create table userlogin (id number(6) not null,name varchar2(30) not null primary key )tablespace users \/ 第一步:...

为什么ORACLE中,用SQL语句插入一条记录后,找不到该记录
oracle插入记录后必须commit,如果你insert之时的sqlplus客户端没有退出,也就是说session没发生改变,你即使没有commit也可以看到你insert的记录,数据库中这样读到的数据叫“脏读”。一旦session发生改变,没有commit的insert的记录是看不到的。没有commit的DML的记录被oracle放到回滚段或者UNDO表空间里,...

相似回答