Вернуть значение из оператора вставки - PullRequest
6 голосов
/ 07 ноября 2008

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

Ответы [ 4 ]

8 голосов
/ 07 ноября 2008

Некоторые возможности:

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

2 голосов
/ 07 ноября 2008

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

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

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

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

0 голосов
/ 07 ноября 2008

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

SELECT my_seq.nextval FROM dual

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

INSERT ...
INSERT ...
0 голосов
/ 07 ноября 2008

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

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

...