6

使用 OLEDB 从 ASP.NET 2.0 (VB) 应用程序处理 Oracle 9i 数据库。有没有办法让插入语句返回一个值?我有一个序列设置为进入数据库时​​对条目进行编号,但我需要在插入后返回该值,以便我可以对刚刚在代码隐藏 VB 中输入的集合进行一些操作。

4

4 回答 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 回答