powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Значение serial
12 сообщений из 12, страница 1 из 1
Значение serial
    #33026324
kl003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как быть в такой ситуации:
Имею таблицу вида
id serial,
name varchar(100).

В процедуре добавляю новые записи. Значение ключа id в процедуре сразу нужно разнести в ряд других таблиц. Как его знать без выполнения запроса select id from table where name=''?
Как стандартно это решается?

Спасибо.
...
Рейтинг: 0 / 0
Значение serial
    #33026376
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UCDI FAQ (искать на groups.google.com, ну и даже здесь есть).

Q.>Как получить значение поля SERIAL только что вставленной записи?
A.> Алексей Банасевич
CREATE PROCEDURE fe_lastserial()
RETURNING integer;
return dbinfo('sqlca.sqlerrd1');
END PROCEDURE;

Вызывать нужно СРАЗУ же после INSERT.

Если на таблице есть триггеры, которые вставляют записи в другие
таблицы, результатом будет значение SERIAL, вставленное в последнюю
такую таблицу.
...
Рейтинг: 0 / 0
Значение serial
    #33026396
kl003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если на таблице есть триггеры, которые вставляют записи в другие
таблицы, результатом будет значение SERIAL, вставленное в последнюю
такую таблицу.


Связанных с таблицей триггеров нет.
В таком случае функция всегда возвращает именно последнее значение для моей таблицы?
...
Рейтинг: 0 / 0
Значение serial
    #33026411
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да!
...
Рейтинг: 0 / 0
Значение serial
    #33026420
kl003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь.
...
Рейтинг: 0 / 0
Значение serial
    #33026500
Enlighten me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kl003Как быть в такой ситуации:
Имею таблицу вида
id serial,
name varchar(100).

В процедуре добавляю новые записи. Значение ключа id в процедуре сразу нужно разнести в ряд других таблиц. Как его знать без выполнения запроса select id from table where name=''?
Как стандартно это решается?
Спасибо.
kl003Связанных с таблицей триггеров нет.
В таком случае функция всегда возвращает именно последнее значение для моей таблицы?
Можно ещё так (в этом случае insert в триггере не важен):
Код: plaintext
1.
2.
create table 'informix'.serial_factory(
nxt_serial serial ;
)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create procedure 'informix'.make_id () 
returning int ;
  delete from 'informix'.serial_factory ;
  insert into 'informix'.serial_factory values( 0 )
return dbinfo ('sqlca.sqlerrd1')
--or
-- return (select nxt_serial from 'informix'.serial_factory) ;
end procedure ;
После чего, вы можете распихать полученный serial везде, куда сочтете нужным. Сори за возможные опечатки - пример набирал по памяти и не проверял.
...
Рейтинг: 0 / 0
Значение serial
    #33026884
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Enlighten me
Код: plaintext
1.
2.
create table 'informix'.serial_factory(
nxt_serial serial ;
)

только обязательно lock mode row и уникальный индекс. В 9.4 появились сиквенсы.
...
Рейтинг: 0 / 0
Значение serial
    #33026995
olleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Enlighten medelete from 'informix'.serial_factory ;
Внимание!
Если вдруг придется базульку перегружать с помощью
dbexport/dbimport, то после перезагрузки процедурина make_id ()
снова вернет 1
...
Рейтинг: 0 / 0
Значение serial
    #33027218
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olleg Enlighten medelete from 'informix'.serial_factory ;
Внимание!
Если вдруг придется базульку перегружать с помощью
dbexport/dbimport, то после перезагрузки процедурина make_id ()
снова вернет 1
О, слона-то я и не приметил.
Удалять в процедуре нельзя вообще, потому что на чужие локи натыкаться будешь постоянно, однопользовательская работа получится.
...
Рейтинг: 0 / 0
Значение serial
    #33027360
Enlighten me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Журавлев Денис
Про lock mode row, согласен. Так и работает. А зачем уникальный индекс по одному значению?
Про удалять нельзя... Хм.. В принципе, вопрос не принципиальный, таблица с одним полем много места не сожрет...
Хотя, примерно такой алгоритм (с удалением) работает в компании N (> 100 пользователей, 24х7, 10^1 - 10^3 новых экзепляров сущностей (срабатывания процедуры) ежедневно) уже много лет, ни о каких проблемах с выдачей serial я не слышал.
2olegg
Сначала удаление, потом, сразу, добавление. В таблице всегда есть одно значение. В этом случае, при экспорте / импорте счётчик serial для таблицы всё равно обнулится?
...
Рейтинг: 0 / 0
Значение serial
    #33027421
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Enlighten me2Журавлев Денис
Про удалять нельзя... Хм.. В принципе, вопрос не принципиальный, таблица с одним полем много места не сожрет...

Где я сказал что удалять нельзя?

Enlighten me
Хотя, примерно такой алгоритм (с удалением) работает в компании N (> 100 пользователей, 24х7, 10^1 - 10^3 новых экзепляров сущностей

Может отдельный поток в сервере app генерирует ключи для всех? Или я дурак и/или тормоз и в инфоркмикс есть аутономус транзакшин?

Enlighten me
(срабатывания процедуры) ежедневно) уже много лет, ни о каких проблемах с выдачей serial я не слышал.

Это странно.

Enlighten me
2olegg
Сначала удаление, потом, сразу, добавление. В таблице всегда есть одно значение. В этом случае, при экспорте / импорте счётчик serial для таблицы всё равно обнулится?
Нет, не обнулится. Точнее он установится в значение той одной строки при загрузке. Все будет хорошо.
...
Рейтинг: 0 / 0
Значение serial
    #33027460
Enlighten me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисГде я сказал что удалять нельзя?
Журавлев ДенисУдалять в процедуре нельзя вообще, потому что на чужие локи натыкаться будешь постоянно, однопользовательская работа получится.

Журавлев ДенисМожет отдельный поток в сервере app генерирует ключи для всех? При встрече распрошу подробнее, но,
ИМХО, нет.
Журавлев ДенисЭто странно. Никакой фантастики (фантазирования). IDS 7.31, Solaris, могучий sun c туевой хучей процессоров. Как я уже говорил, о подробностях расспрошу и отпишу, если не забуду...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Значение serial
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]