john_chek писал(а):WildSery , это не фигня уважаемый, ты ведь не знаешь, что здесь и зачем(это не генератор первичного ключа вовсе), поэтому в таких коментах не нуждаюсь, лучше вопрос читай.
Не указывай, что для меня лучше, ведь за мои ответы ты не платишь.
Что хочу, то и пишу, а обоснованность написанного пусть модератор рассудит.
Вопрос я прочитал, и он указывает на весьма поверхностные знания как по генераторам, так и по транзакциям.
Теперь собственно "ответы".
1. В единицу генератор выставляют обычно так:
nomer = gen_id(gen_kart_nomer_vhod, 1-gen_id(gen_kart_nomer_vhod, 0));.
Сделав nomer = GEN + 1, ты выставил генератор в 0, а значение получил 1. Следующее чтение генератора даст опять 1. Т.е. два первых будут. Но это ещё цветочки.
3. Судя по возникшей проблеме (невозможность вставки второго такого же года) процедура запускается не монопольно, что вкупе с использованием генератора делает её ошибочной. Не будет она правильно номера выдавать в самом начале года, выдаст номер "1" всем (почти)одновременно запросившим клиентам, до коммита первого из них.
Эта задача решаема, но по-другому. А так как ты, задав вопрос, нетерпим к здоровой критике, то и решение попробуй составить самостоятельно. По крайней мере, без моего участия.