Работа с базой данных Oracle 9i из приложения ASP.NET 2.0 (VB) с использованием OLEDB. Есть ли способ, чтобы оператор вставки возвращал значение? У меня есть последовательность, настроенная на нумерацию записей по мере их поступления в базу данных, но мне нужно, чтобы это значение возвращалось после вставки, чтобы я мог выполнить некоторые манипуляции с набором, который я только что ввел в код программной части 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 есть ключевое слово «возврат», которое может возвращать данный столбец вставленной строки, однако для этого может потребоваться вручную установить поле «автоинкремент», вызвав следующее значение в вашей последовательности.
Проверьте это обсуждение об этом:
http://forums.oracle.com/forums/thread.jspa?threadID=354998
Однако вы всегда можете выбрать текущий порядковый номер во втором запросе, вроде MySQL last_insert_id()
Если это значение является ключом, который создает база данных, вы столкнулись с хорошим примером того, почему вы должны использовать UUID в качестве ключа таблицы и генерировать их в коде.
Этот метод даст вам более высокую производительность в вашей настройке.
Сначала используйте оператор SELECT, чтобы получить следующую последовательность. Для этого вы можете использовать двойную таблицу Oracle.
SELECT my_seq.nextval FROM dual
Используйте полученную последовательность в последующих операторах INSERT.
INSERT ...
INSERT ...