Возврат значения из оператора вставки

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


person Maximillian    schedule 06.11.2008    source источник


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

person Tony Andrews    schedule 07.11.2008
comment
Привет Тони, Это применимо и для SQL Server. Мне нужно то же самое для SQL Server 2008 R2. - person Sujay Ghosh; 19.10.2011
comment
@Sujay, извините, я не знаю SQL Server, но см. bytes.com/topic/sql-server/answers/ - person Tony Andrews; 19.10.2011
comment
Спасибо за вашу помощь. Но я не ищу хранимую процедуру. - person Sujay Ghosh; 19.10.2011
comment
Суджей: Кажется, это работает, по крайней мере, для меня как одно утверждение (из одного из ответов в этой статье). ВСТАВИТЬ В MyTable (MyData) VALUES(1) SELECT SCOPE_IDENTITY() - person Jeff; 22.03.2014

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

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

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

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

person jishi    schedule 06.11.2008

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

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

person TravisO    schedule 06.11.2008

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

SELECT my_seq.nextval FROM dual

Используйте полученную последовательность в последующих операторах INSERT.

INSERT ...
INSERT ...
person Mark Stock    schedule 07.11.2008