Лучшие практики: .NET: Как вернуть PK в базу данных Oracle? - PullRequest
6 голосов
/ 01 октября 2008

В SQLServer кажется общепринятым, что добавление SELECT SCOPE_IDENTITY () в конец вставки - это лучший способ вернуть PK вновь вставленной записи, если вы используете поле с автоинкрементом для ПК.

Однако я не могу найти эквивалент для Oracle.

Лучшей практикой является использование последовательности для генерации PK, но существуют разные варианты реализации даже этого. Вы оставляете за разработчиком возможность добавлять sequence.nexval или использовать триггер?

В любом случае возвращение нового идентификатора, похоже, является распространенной проблемой.

Предложения и решения, с которыми я столкнулся, включают:

  • создание хранимого процесса, который возвращает PK
  • запустил идентификатор выбора из seq.nextval, а затем передал его на вставку
  • выберите max (id) после вставки (Примечание: не делайте этого!)
  • добавить предложение RETURNING для вставки

Каким должно быть решение "наилучшей практики" для этой ситуации?

Ответы [ 3 ]

9 голосов
/ 01 октября 2008

Вы можете использовать предложение RETURNING, чтобы сделать это в хранимых процессах Oracle.

Например:

TABLEA имеет NAME и EMP_ID. EMP_ID заполняется внутри, когда записи вставляются.

INSERT INTO TABLEA (ИМЯ) ЗНАЧЕНИЯ ('BOB') ВОЗВРАЩАЯ EMP_ID INTO o_EMP_ID;

Предполагается, что строка находится в сохраненном процессе с выходным параметром o_EMP_ID.

Надеюсь, это поможет ... если нет, вот более подробный пример:

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm

4 голосов
/ 01 октября 2008

Предложение RETURNING предназначено именно для этого вида использования, поэтому я бы назвал его наилучшей практикой.

Альтернативой может быть выбор seq.CURRVAL после вставки. Возвращает последнее значение, полученное из последовательности в этом сеансе.

2 голосов
/ 01 октября 2008

Хранимая процедура и возвращаемое предложение имеют явное преимущество от одного вызова базы данных, который уступает любому другому решению. Делаете ли вы это с помощью хранимой процедуры или используете возвращающее предложение - это целая банка червей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...