Вставка в Oracle и получение сгенерированного идентификатора последовательности

У меня есть несколько необработанных SQL-запросов для SQL Server, которые используют SCOPE_IDENTITY для получения сгенерированного идентификатора для определенного INSERT сразу после того, как INSERT выполняется за одно выполнение ...

INSERT into Batch(
BatchName,
BatchType,
Source,
Area
) Values (
@strBatchName,
@strType,
@strSource,
@intArea
);

SELECT SCOPE_IDENTITY() BatchID;

Вопрос:

Что лучший способ сделать это для базы данных Oracle?

Можно ли это сделать в Oracle с помощью стандартного SQL или мне нужно переключить это на использование хранимой процедуры и поместить что-то подобное в тело хранимой процедуры?

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

Если два выполняются одновременно, каждый из них должен возвращать правильный сгенерированный идентификатор для каждого соответствующего вызова. Обратите внимание, что я не использую SQL Server «@@ IDENTITY» из-за многопоточного характера вызовов.

Я бы предпочел сохранить его как необработанный SQL, если это возможно, поскольку мне намного проще управлять на разных платформах (один файл, содержащий блоки SQL каждой платформы, разделенные тегами идентификации СУБД). Сохраненные процессы - это немного больше для меня управления, но я могу пойти этим путем, если это единственно возможный способ.

28
задан Allbite 5 April 2011 в 21:49
поделиться