使用 OLEDB 从 ASP.NET 2.0 (VB) 应用程序处理 Oracle 9i 数据库。有没有办法让插入语句返回一个值?我有一个序列设置为进入数据库时对条目进行编号,但我需要在插入后返回该值,以便我可以对刚刚在代码隐藏 VB 中输入的集合进行一些操作。
MadMAxJr
问问题
7594 次
4 回答
8
一些可能性:
1) 使用 RETURNING 子句:
INSERT INTO emp (empno, ename) VALUES (emp_seq.NEXTVAL, 'ANDREWS')
RETURNING empno INTO :variable;
2) 使用序列 CURRVAL:
INSERT INTO emp (empno, ename) VALUES (emp_seq.NEXTVAL, 'ANDREWS');
SELECT emp_seq.CURRVAL INTO :variable FROM DUAL;
CURRVAL 返回会话生成的最后一个序列值。
于 2008-11-07T10:00:40.947 回答
2
Oracle 似乎有一个名为“returning”的关键字,它可以返回插入行的给定列,但是这可能需要您通过调用序列中的下一个值来手动设置“autoincrement”字段。
检查有关它的讨论:
http://forums.oracle.com/forums/thread.jspa?threadID=354998
但是,您始终可以在第二个查询中选择当前序列号,有点像 MySQLlast_insert_id()
于 2008-11-06T23:13:27.383 回答
0
如果这个值是数据库创建的键,那么您就遇到了一个很好的例子,为什么应该使用 UUID 作为表键,并在代码中生成它们。
此方法将为您的设置提供更快的性能。
于 2008-11-06T23:03:12.443 回答
0
首先使用SELECT语句获取下一个序列。您可以使用Oracle 双表来执行此操作。
SELECT my_seq.nextval FROM dual
使用您在后续INSERT语句中检索到的序列。
INSERT ...
INSERT ...
于 2008-11-07T00:43:24.020 回答