или, как сценарий pl-sql:
я есть несколько необработанных запросов 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 или мне нужно переключить это, чтобы использовать хранимую процедуру и поместить что-то подобное в тело хранимого процесса?
Если это должен быть сохраненный процесс, то каков де-факто стандартный способ извлечения последнего сгенерированного порядкового номера, учитывая, что в нескольких потоках могут быть перекрывающиеся исполнения, поэтому этому механизму потребуется получить правильный сгенерированный идентификатор и не обязательно абсолютный последний сгенерированный идентификатор.
Если два выполняются одновременно, то каждый должен возвращать правильный сгенерированный идентификатор из каждого соответствующего вызова. Обратите внимание, что я не использую «@@ IDENTITY» SQL Server из-за многопоточного характера вызовов.
Я бы предпочел сохранить его как необработанный SQL, если это возможно, поскольку мне намного легче управлять на разных платформах (один файл, содержащий блок SQL каждой платформы, разделенный идентифицирующими тегами СУБД). Хранимые процедуры - это немного больше работы для меня, но я могу пойти по этому пути, если это возможно.