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