У меня есть таблица, в которой люди были вставив в получении первичного ключа посредством производстваИспользование последовательности в существующей таблице
SELECT max(id)+1 from table_a;
Я хочу добавить несколько записей в этой таблице, используя INSERT INTO table_a SELECT ... FROM table_b, table_c ...
простой SQL сценарий, и мне интересно, как сгенерировать первичные ключи. Моя первая мысль заключалась в создании временной последовательности, но у Oracle, по-видимому, нет select setval
, чтобы установить первое значение. Итак, как мне получить текущее значение max (id) +1, чтобы установить параметр «начать с» в мою последовательность?
я нашел что-то он-лайн, что я думал, что будет работать:
COLUMN S new_value st select max(id)+1 S from table_a;
CREATE SEQUENCE cra_seq start with &st;
Но это на самом деле не использовать ст в CREATE SEQUENCE
, но вместо этого мне подсказывает, чтобы ввести его, что это не то, что мне нужно.
Это побуждает вас ввести параметр, потому что sql * plus выходит из «&». Поместите «set define off» в качестве первой строки вашего скрипта и повторите попытку. –
Будете ли вы когда-нибудь иметь дело, когда в эту таблицу одновременно войдут более одного человека? Если это так, все методы, использующие max (id), будут терпеть неудачу, так как каждый параллельный сеанс будет иметь тот же самый максимальный id. Как просто создать последовательность и использовать ее в качестве источника ваших идентификаторов для всех вставок таблиц? –
@ Ник, поверь мне, я знаю, насколько ужасен метод «select max (id)». Я пытался убедить их перейти к последовательности, но полномочия, которые можно сказать «о, мы переходим на следующий выпуск, поэтому на этот раз это будет нормально». –