2014-11-26 2 views
0


Привет, каждый.
Мне нужна помощь с этой проблемой.
Мне нужно создать кучу серийных номеров в одной из моих таблиц, и для этого я хочу использовать хранимую процедуру. Поэтому я хочу передать FirstSN и LastSN в качестве параметров для SP, и он вставляет N записей в мою таблицу. Серийный номер состоит из префикса и инкрементной части. Например, я посылаю SN0001, как FirstSN и SN0100 как LastSN и он должен вставить следующее:
SN0001
SN0002
SN0003
...
SN0099
SN0100
Генерировать диапазон строк

Как я могу сделать это без использования петель?

P.s. Я использую оракула 11.2.0

+0

ответ MultiSync в ниже на 100% правильно, но позвольте мне предложить другое решение ... Если запись имеет поля первичного ключа (например, в части ID) создать виртуальный столбец с конкатенация с префиксом SN или использование объекта последовательности. Это гарантирует, что ваши SN # будут уникальными и будут масштабируемым вариантом с минимальным вмешательством (или даже SP). – mmmmmpie

+0

@mmmmmpie серийный номер является основным ключом в этой таблице. Проблема в том, что в одной базе данных у меня есть таблица с диапазонами SN001 - SN100, SN123 - SN135, ... И в этой базе данных мне нужно создать серийные номера, а –

+0

используйте SEQUENCE вместе с вашим префиксом. см. SEQUENCES в библиотеке oracle – theDbGuy

ответ

5
select 'SN' || lpad(lvl, length('100')+1, '0') from (select level lvl from dual connect by level <= 100); 
+0

Проблема заключается в том, что инкрементная часть не всегда длинна 4 символа Хотя это, вероятно, могло бы работать, если бы я пропустил префикс и первую инкрементную часть и последнюю инкрементную часть Итак, если никто не предлагает ничего лучшего, это будет принятый ответ! –

+0

@Maiorov Yury Основная идея заключается в том, как генерировать числа. Во всяком случае, я обновил ответ. Например, вы можете использовать LPAD для добавления нулей влево. – Multisync

Смежные вопросы