Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как генерировать число 23/000001 в оракле?  [new]
Асланали
Member

Откуда: Республика Дагестан,Махачкала
Сообщений: 246
Здравствуйте, как увеличивать на единицу последнюю часть 23/000002 при добавлении запись в базу?.

Применять будет тут:


    insert into ACCOUNTS
      (ACC_PERID, ACC_DOGID, ACC_DATE, ACC_DOCNUM, ACC_ACCSTATID)
    values
      (20121101, -- "Январь 2012 года" 
       v_dog_id, -- ID договора
       p_ACC_DATE, -- '31.01.2012'
       [color=red]'23/001000'[/color], -- Номер счет-фактуры
       1); 
14 июн 12, 16:34    [12714866]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
K790
Member

Откуда:
Сообщений: 634
Асланали,

небольшой вопрос по бизнесу, российский документооборот ?
14 июн 12, 16:46    [12714973]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Асланали
Member

Откуда: Республика Дагестан,Махачкала
Сообщений: 246
Русский
14 июн 12, 16:48    [12714987]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
K790
Member

Откуда:
Сообщений: 634
Асланали,

Правильно ли я понимаю про 23/001000, что часть после "/" сбрасывается в 00001 в рарезе года и часть до "/" увеличивается на 1 ?
14 июн 12, 16:56    [12715066]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Асланали
Member

Откуда: Республика Дагестан,Махачкала
Сообщений: 246
Мне подсказали идею.

select '23/'||to_char(rownum) as n from самая большая таблица в базе

у меня выглядит так:

select '23/'||to_char(rownum, '099999') as n from  accounts;


Еще посоветовали создать по нему sequence и использовать его, вместо rownum = значение сиквенса.

Как создать по нему sequence?
14 июн 12, 16:59    [12715099]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
select '23/'||lpad(MySeq.nextval,6,'0') from dual
но что такое 23 я не понял поэтому тупо добавил в начало с /
14 июн 12, 17:01    [12715111]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Асланали
Member

Откуда: Республика Дагестан,Махачкала
Сообщений: 246
Вот результат:
23/ 003163
23/ 003164
23/ 003165
23/ 003166
23/ 003167
23/ 003168
23/ 003169
23/ 003170
23/ 003171
23/ 003172
23/ 003173
23/ 003174
23/ 003175
23/ 003176
23/ 003177
23/ 003178
23/ 003179
23/ 003180
23/ 003181
23/ 003182
23/ 003183
23/ 003184
23/ 003185
23/ 003186
23/ 003187
23/ 003188
23/ 003189
23/ 003190
23/ 003191
23/ 003192
23/ 003193
23/ 003194
23/ 003195

Выбрал не с начала (23/ 000001).
14 июн 12, 17:01    [12715112]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Асланали
Как создать по нему sequence?


https://www.google.az/search?q=oracle+-+%D0%9A%D0%B0%D0%BA+%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C+sequence&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox
14 июн 12, 17:02    [12715120]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Асланали
Member

Откуда: Республика Дагестан,Махачкала
Сообщений: 246
Ramin
select '23/'||lpad(MySeq.nextval,6,'0') from dual
но что такое 23 я не понял поэтому тупо добавил в начало с /

Это номер базы.
Его тоже можно изменить, но в данный момент мне это не нужно.
14 июн 12, 17:02    [12715122]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Асланали
Ramin
select '23/'||lpad(MySeq.nextval,6,'0') from dual
но что такое 23 я не понял поэтому тупо добавил в начало с /

Это номер базы.
Его тоже можно изменить, но в данный момент мне это не нужно.

ну тогда sequence и LPAD
14 июн 12, 17:04    [12715129]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
Ramin
Асланали
пропущено...

Это номер базы.
Его тоже можно изменить, но в данный момент мне это не нужно.

ну тогда sequence и LPAD
to_char
14 июн 12, 17:09    [12715169]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
stax..
Guest
Асланали
Вот результат:
Выбрал не с начала (23/ 000001).

допускаются ли дырки?

напр
23/ 003294
23/ 003296


.....
stax
14 июн 12, 18:24    [12715737]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
agathis
Member

Откуда:
Сообщений: 94
stax..
допускаются ли дырки?


насколько я помню русский документооборот, нет.
так что или хранить префикс и номер в разных столбцах, склеивать их на клиенте и делать pref||max(num)+1 (проще), или парсить строку (сложнее)
14 июн 12, 19:02    [12715921]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
stax..
Guest
agathis
stax..
допускаются ли дырки?


насколько я помню русский документооборот, нет.
так что или хранить префикс и номер в разных столбцах, склеивать их на клиенте и делать pref||max(num)+1 (проще), или парсить строку (сложнее)

если не допускаються, то последовательности не подходят,
надо рисовать свою примочку

......
stax
14 июн 12, 19:10    [12715961]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Асланали
Member

Откуда: Республика Дагестан,Махачкала
Сообщений: 246
stax..
Асланали
Вот результат:
Выбрал не с начала (23/ 000001).

допускаются ли дырки?

напр
23/ 003294
23/ 003296


.....
stax

нет
15 июн 12, 08:09    [12717086]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Асланали
Member

Откуда: Республика Дагестан,Махачкала
Сообщений: 246
Создал отдельно секвенс

create sequence export_accounts_seq
minvalue 111111
maxvalue 999999
start with 111111
increment by 1

Буду использовать так:
select '23/'||lpad(export_accounts_seq.nextval,6,'0') into v_n from dual;
15 июн 12, 08:30    [12717126]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
Асланали
Member

Откуда: Республика Дагестан,Махачкала
Сообщений: 246
Благодарю всех за полезные советы. Спасибо.
15 июн 12, 08:31    [12717131]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
stax..
Guest
Асланали
Создал отдельно секвенс

create sequence export_accounts_seq
minvalue 111111
maxvalue 999999
start with 111111
increment by 1

Буду использовать так:
select '23/'||lpad(export_accounts_seq.nextval,6,'0') into v_n from dual;

если по разных причинах транзакция откатится (rollback) то будут дирки

......
stax
15 июн 12, 15:19    [12720737]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
123йй
Guest
Асланали,
andrey_anonymous предложил выриант
11481174
15 июн 12, 15:33    [12720936]     Ответить | Цитировать Сообщить модератору
 Re: Как генерировать число 23/000001 в оракле?  [new]
SysOper
Member

Откуда: M
Сообщений: 9760
stax..
если по разных причинах транзакция откатится (rollback) то будут дирки

......
stax

+1
Добавлю. Если натянуть на RAC, то дырок будет еще больше
15 июн 12, 15:34    [12720939]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить