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,谢谢了,本人新手!!!
代码:
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値。的主要内容,如果未能解决你的问题,请参考以下文章