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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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类型的
参考技术A 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,'黎明')
剩下你自己可以完成了
参考技术B 建议是 先 select CASE_SEQ.nextval from dual 读取到唯一的 新的ID, 保存到一个变量中。
然后用这个新的 ID, 插入到表中去.
insert into PATIENT_T(pid,name) values(变量,'黎明')

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

sql server建表时怎么设置ID字段自增

sql server建表时设置ID字段自增的方法有两种:

1 、在SQL Server Management Studio中实现SQL Server自增字段

打开SQL Server Management Studio,打开数据库之后,在选中的表上点“修改”,在选中需要设置为自增的字段,在右下方的表设计器里选择“标识规范”,选“是”,就设定即可。

也可以在表的属性窗口中设置设置标识列:

2、使用SQL语句在程序或者查询分析器里面实现SQL Server自增字段

sql server 设置自增字段identity属性 (以新建数据表tablename中的id字段为例)

create table tablename      

(      

id int identity(1,1) //identity表示自增列的意思,而int identity(1,1)表示从1开始递增,每次自增1。

)     

这样设置之后,tablename数据表中的id字段就是自增列。

如果想实现带前缀或者后缀的自动增加字段,不能用varchar,还是使用上面的方法创建字段,但是在读取的时候用增加前后缀的形式来显示想要的效果,例如如果希望得出结果是a001可以这么做select \'a\'+convert(varchar(20),id) from tablename,这里的tablename是刚才建立的具体的表明。

参考技术A Create Table yourtable
(
id int identity(1,1),--这是自增id
name varchar(50) --这列写着耍的
)

 

在建表的时後可以对表作一些其他的设置,譬如:设定主键、外键关系、约束等

Create Table yourtable
(
id int not null Primary key  identity(1,1),--这是自增id,同时设置该列为主键
name varchar(50) check(''!=name ) --约定name值不可以是空字符串
)


要注意了,上面的建表语句name列没有写not null 只判断了不能是空字符串,但null是会通过的,因为null与任何值比较都是不等的

本回答被提问者采纳
参考技术B

在用sql语言建表的时候,用sql语句将自增写入代码中。

语句创建

create table table

name(id int identity(1,1),

其他字段

)

aql  server概述:

SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。

以上是关于oracle数据库,表中有id(自增字段,主键), insert 语句插入一条记录后要求,返回当前插入记录的id値。的主要内容,如果未能解决你的问题,请参考以下文章

oracle一个表中没有主键怎么设置主键

Ef DbMigration 非主键字段 怎么设置为自增

oracle怎么实现id自增和设置主键啊

2017年2月21日 Oracle数据库,怎么设置表中主键的自增

SQ数据库中怎样设置自增主键?

sql 设置主键 自动增长