Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Базы данных > PostgreSQL
Перезагрузить страницу Тип данных serial и функция currval
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
[GANQ] QWERTY [GANQ] QWERTY вне форума
Member
 
Сообщений: 55
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.12.2005
Thumbs up 19.03.2007, 23:13

Необходимо сделать вставку записей в две связанных таблицы.

ПРЕАМБУЛА:
Создание таблиц:

Код:
CREATE TABLE Nodes (
id_Node serial,
name_Node text UNIQUE NOT NULL,
descr_Node text,
PRIMARY KEY (id_Node)
);
Код:
CREATE TABLE Node_Properties (
id_Nodeprop serial,
id_Node serial,
id_Prop serial,
value_Prop text,
PRIMARY KEY(id_Nodeprop),
FOREIGN KEY (id_Node) REFERENCES Nodes(id_Node),
FOREIGN KEY (id_Prop) REFERENCES Properties(id_Prop)
);
Как видим, при вставке в таблицу Nodes:
Код:
INSERT INTO nodes(name_Node, descr_Node) VALUES ('first', 'its first node!');
генерируется очередной номер в поле id_Node.
Необходимо вставить этот же id_Node в таблицу NodeProperties.
АМБУЛА:
После гуглования было понято, что тип данных SERIAL создает sequence и можно использовать функцию currval (вопрос 4.11.2 здесь:
http://www.linuxshare.ru/postgresql/FAQ_russian.html
Соответственно, если написать верхний запрос с INSERT'ом, то по
Код:
SELECT currval('id_node')
должно возвращаться свежее новоприсвоенное значение id_node.
ВОПРОС:
почему этого не происходит?
PS Пробовал также писать с двойными кавычками, без кавычек, с FROM'ом и пр.
Заранее большое спасибо!
Ответить с цитированием
  (#2 (permalink)) Старый
[GANQ] QWERTY [GANQ] QWERTY вне форума
Member
 
Сообщений: 55
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.12.2005
По умолчанию 19.03.2007, 23:40

Пардон, не прочел самого главного.
Цитата:
Заметим, что имя автоматически созданного объекта SEQUENCE будет <table>_<serialcolumn>_seq, где table и serialcolumn являются соответственно именами вашей таблицы и вашей колонки SERIAL
То есть запрос должен выглядеть так:
Код:
SELECT currval('nodes_id_node_seq');
УРА! РАБОТАЕТ!

Прошу прощения за беспокойство.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Serial Port (RS232) Mr.Denis Visual Basic 1 14.09.2011 05:42
Не работает контроллер Serial ATA Vinchi Любые вопросы от новичков 5 07.07.2011 11:37
Функция типа Т9 как на сотовых.Есть ли прога для ПК чтоб была та же функция ? Технарь Софт и программы 11 14.03.2009 12:39
Программное обеспечение для USB Serial Controller. Dankler Любые вопросы от новичков 11 06.04.2008 19:07
Почему происходит неверное считывание данных и не рабочая функция SilverV C++ Builder 7 06.11.2007 16:13
Какая функция проверят правильность вводимых данных в С++ helfer Вопросы начинающих программистов 5 11.09.2007 12:27
QNX -> RAW SERIAL RS-232 bug2bug C++ на Unix 3 09.10.2006 23:44
Serial to Ethernet передача данных через COM порт Regbist Assembler 0 16.09.2005 12:19
Где взять cd key и Serial для LispWorks в интернете Reader Lisp 0 23.05.2005 08:49
Где найти serial и TADODataset r_13 PostgreSQL 1 21.02.2005 21:04
Как узнать hdd serial num eazz C++ Builder 1 25.08.2003 18:31
Как в C++Билдере узнать HDD Serial number Anonymous C++ Builder 5 17.09.2002 21:16



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов