Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получить идентификатор из созданной записи / 10 сообщений из 10, страница 1 из 1
27.11.2005, 22:02
    #33402281
ASKh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
Что-то не могу сообразить (наверное из-за недостаточного опыта работы с SQL...). Есть таблица, одно из полей - идентификатор, заполняется автоматически (допустим, тип serial). Каким образом после создания записи можно получить его значение? Если важно - работа с базой ведётся из Perl (DBI).

Пока лучшее, что придумал - это всё-таки не использовать тип serial, а создать последовательность вручную, получить новое значение при помощи функции nextval и потом уже создавать строку, задав идентификатор явно. То есть в итоге не воспользоваться подстановкой значения по умолчанию для идентификатора.
...
Рейтинг: 0 / 0
28.11.2005, 01:17
    #33402322
Corba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
как мне кажется можно воспользоваться двумя способами.
Первый если идентификатор заведомо увеличивает значение то SELECT MAX(ID) FROM ...WHERE....
Второй способ заключается в том что после закидывания какой-либо информации в БД вызвать SELECT ID FROM.... WHERE .... , где в качестве условий произвести сравнение полей имено с той самой информацией которую вы закинули.

Думаю что есть ещё способы, но они мне неизвестны. Если у вас получится сделать по другому, обязательно расскажите методику.
...
Рейтинг: 0 / 0
28.11.2005, 01:52
    #33402335
AntonIgg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
Мдас.
Тип serial - это и есть последовательность, только создается она автоматически и к ней можно как же точно обращаться. Т.е. внеслась какаето запись, вызвав currval можно получить его значение.
select currval('имя последовательности') into seqlastvaluepar;
Имя последовательности, насколько помню дается такое:
Код: plaintext
TableName + '_' + ColumnName + '_seq' 
...
Рейтинг: 0 / 0
28.11.2005, 10:31
    #33402666
ASKh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
AntonIggМдас.
Тип serial - это и есть последовательность, только создается она автоматически и к ней можно как же точно обращаться. Т.е. внеслась какаето запись, вызвав currval можно получить его значение.
select currval('имя последовательности') into seqlastvaluepar;
Имя последовательности, насколько помню дается такое:
Код: plaintext
TableName + '_' + ColumnName + '_seq' 

Ну да, он сообщает при создании таблицы с полем типа serial что была создана последовательность. Но в итоге, чтобы получить значение идентификатора, всё равно приходим к двум запросам. То есть одним, как я понимаю, обойтись нельзя?
...
Рейтинг: 0 / 0
28.11.2005, 12:29
    #33403067
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
ASKh
Ну да, он сообщает при создании таблицы с полем типа serial что была создана последовательность. Но в итоге, чтобы получить значение идентификатора, всё равно приходим к двум запросам. То есть одним, как я понимаю, обойтись нельзя?

А в чём собственно проблема? Чем второй запрос мешает?
...
Рейтинг: 0 / 0
28.11.2005, 14:06
    #33403401
ASKh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
mwolf ASKhТо есть одним, как я понимаю, обойтись нельзя?

А в чём собственно проблема? Чем второй запрос мешает?

Да в принципе ничем... Просто хотелось узнать, вдруг есть стандартное средство для такой ситуации, всё-таки создать идентификатор и сразу его получить - как-то логично :-)
...
Рейтинг: 0 / 0
28.11.2005, 14:28
    #33403468
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
ASKhДа в принципе ничем... Просто хотелось узнать, вдруг есть стандартное средство для такой ситуации, всё-таки создать идентификатор и сразу его получить - как-то логично :-)

Не вижу логики.
Вставки записи одно действие, получение состояния счётчика - другое.
...
Рейтинг: 0 / 0
28.11.2005, 14:42
    #33403538
AntonIgg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
ASKh
Да в принципе ничем... Просто хотелось узнать, вдруг есть стандартное средство для такой ситуации
Описанный алгоритм как раз и является стандартным решением данного вопроса
...
Рейтинг: 0 / 0
28.11.2005, 15:56
    #33403809
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
ASKh mwolf ASKhТо есть одним, как я понимаю, обойтись нельзя?

А в чём собственно проблема? Чем второй запрос мешает?

Да в принципе ничем... Просто хотелось узнать, вдруг есть стандартное средство для такой ситуации, всё-таки создать идентификатор и сразу его получить - как-то логично :-)
относительно распространенное (но не назвал бы стандартным) решение - вставлять данные вызовом хранимки, возвращающей некствал. Обычно пользую для вставки записи разом с подчиненкой.
...
Рейтинг: 0 / 0
28.11.2005, 15:57
    #33403814
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить идентификатор из созданной записи
тьфу, каррвал, а не некствал конечно же.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получить идентификатор из созданной записи / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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