北美小说:各种SQL Insert 返回值
来源:百度文库 编辑:偶看新闻 时间:2024/05/10 14:09:04
declare
v_id t.id%type;
begin
insert into t(id) values(seq.nextval) returning id into v_id;
end;
/
当插入一条记录时,我们很多时候都想马当前插入的主键返回出来.作为另一个操作的条件.如果主键是
自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事.可能对于一些特殊的数据库必须把
insert into和select max(key)或什么序列当前值作为一个事务的原子来操作,但很多数据库(以及数据库操作环境)
并不能为你提供事务并发控制.所以如果多人同时操作,那么select max(key)很可能就不是你刚才insert的
那条记录.
在JDBC3.0中,已经可以直接返回insert 语句的主KEY和其它值,但目前只有mysql支持.oracl和sqlserver
的JDBC都不支持这个特性.而且如果离开JAVA平台就没有这个特性了.
详细读了oacle,sqlserver,mysql的文档,对上面三种数据库找到了以下解决方案,在java和非java平台都适用:
SQLServer:
INSERT INTO tableName (fieldList ...) values (valueList ...) SELECT @@IDENTITY AS aliasName;
这一句相当于执行查询操作,从结果集中getXXX(aliasName);就可以获取.
Oracle:
INSERT INTO tableName (fieldList ...) values (valueList ...) RETURNING [primaryKey INTO]:aliasName;
同上的方法可以获取.这两种方法都是数据库支持的sql语句,原以根本不存在并发冲突.
mysql:
没有找到可以绝对保证原子性的语句(谁知道反馈一下)
如果是在JAVA平台,可以直接利用 Statement的返回键特性.比较安全,在非java平台上,目前只能通过在同一会话中用
LAST_INSERT_ID([columnName])来获取,注意一定要在同一会话中.
v_id t.id%type;
begin
insert into t(id) values(seq.nextval) returning id into v_id;
end;
/
declare
v_id t.id%type;
begin
insert into t(id) values(seq.nextval) returning id into v_id;
end;
/
当插入一条记录时,我们很多时候都想马当前插入的主键返回出来.作为另一个操作的条件.如果主键是
自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事.可能对于一些特殊的数据库必须把
insert into和select max(key)或什么序列当前值作为一个事务的原子来操作,但很多数据库(以及数据库操作环境)
并不能为你提供事务并发控制.所以如果多人同时操作,那么select max(key)很可能就不是你刚才insert的
那条记录.
在JDBC3.0中,已经可以直接返回insert 语句的主KEY和其它值,但目前只有mysql支持.oracl和sqlserver
的JDBC都不支持这个特性.而且如果离开JAVA平台就没有这个特性了.
详细读了oacle,sqlserver,mysql的文档,对上面三种数据库找到了以下解决方案,在java和非java平台都适用:
SQLServer:
INSERT INTO tableName (fieldList ...) values (valueList ...) SELECT @@IDENTITY AS aliasName;
这一句相当于执行查询操作,从结果集中getXXX(aliasName);就可以获取.
Oracle:
INSERT INTO tableName (fieldList ...) values (valueList ...) RETURNING [primaryKey INTO]:aliasName;
同上的方法可以获取.这两种方法都是数据库支持的sql语句,原以根本不存在并发冲突.
mysql:
没有找到可以绝对保证原子性的语句(谁知道反馈一下)
如果是在JAVA平台,可以直接利用 Statement的返回键特性.比较安全,在非java平台上,目前只能通过在同一会话中用
LAST_INSERT_ID([columnName])来获取,注意一定要在同一会话中.
SQL返回值问题
SQL INSERT语句
sql insert 用法!
SQl 的INSERT语句
SQl insert 语句
sql语句 insert into 错误
关于asp判断sql的返回值的问题
说明SQL语句INSERT INTO dept VALUES
说明SQL语句INSERT INTO dept VALUES
关于sql中的insert效率问题?
asp sql 怎么 insert 不了啊?
asp sql INSERT 语句约束冲突??
SQL="insert into upLoadFile (Title,
是有关SQL语句(insert)的问题
sql中的insert into 怎么总出问题
sql中的insert into 怎么总出问题?
SQL 各种锁?
sql语句insert into 语法问题很简单的
SQL的INSERT怎么可以一次插入多项数据?
SQL 2000如何判断insert 的是哪个表?
求SQL语句-返回符合条件的记录数
如何让sql语句只返回第一行
如果想让SQL只返回5行查询结果,而不是全部返回,怎么办?
ksh 函数返回值