Вставка в 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 платформы, разделенный идентификационными тегами СУБД). Хранимые процессы - это немного больше для меня управления, но я могу пойти этим путем, если это единственно возможный способ. в WPF с использованием C #

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