Возвращает значение из инструкции insert

работа с базой данных Oracle 9i из ASP.NET 2.0 (VB) приложение с использованием OLEDB. Есть ли способ, чтобы оператор insert возвращал значение? У меня есть последовательность, настроенная на числовые записи, когда они входят в базу данных, но мне нужно, чтобы это значение вернулось после вставки, чтобы я мог сделать некоторые манипуляции с набором, который я только что ввел в код позади VB.

4 ответов


возможности:

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 возвращает последнее значение последовательности, сгенерированное сеансом.


Oracle, похоже, имеет keywod под названием "returning", который может возвращать данный столбец вставленной строки, однако для этого может потребоваться вручную установить поле "autoincrement", вызвав следующее значение в вашей последовательности.

проверьте это обсуждение об этом:

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

однако вы всегда можете выбрать текущий порядковый номер во втором запросе, вроде MySQLs last_insert_id()


Если это значение является ключом, созданным базой данных, вы столкнулись с хорошим примером того, почему вы должны использовать UUIDs в качестве ключа таблицы и генерировать их в коде.

этот способ даст вам более высокую производительность в настройках.


сначала использовать выберите оператор, чтобы получить следующую последовательность. Вы можете использовать двойная таблица Oracle для этого.

SELECT my_seq.nextval FROM dual

используйте последовательность, которую вы получили в последующем вставить заявления.

INSERT ...
INSERT ...