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