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

Ответы на вопрос(5)

Ваш ответ на вопрос