从insert语句返回一个值

时间:2008-11-06 23:01:58

标签: vb.net oracle asp.net-2.0

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

4 个答案:

答案 0 :(得分: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返回会话生成的最后一个序列值。

答案 1 :(得分:2)

Oracle似乎有一个名为“returns”的keywod可以返回插入行的给定列,但是这可能需要您通过调用序列中的下一个值来手动设置“autoincrement”字段。

查看关于它的讨论:

http://forums.oracle.com/forums/thread.jspa?threadID=354998

但是,您始终可以在第二个查询中选择当前序列号,类似于MySQL last_insert_id()

答案 2 :(得分:0)

如果此值是数据库创建的密钥,那么您已经遇到了一个很好的示例,为什么您应该使用UUID作为表密钥,并在代码中生成它们。

此方法可让您在设置中获得更快的性能。

答案 3 :(得分:0)

首先使用 SELECT 语句来获取下一个序列。您可以使用the Oracle dual table执行此操作。

SELECT my_seq.nextval FROM dual

使用您在后续 INSERT 语句中检索的序列。

INSERT ...
INSERT ...