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