У меня есть несколько необработанных 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 #