telepath |
Отправлено: 10.11.2004, 11:38 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Хочу вставить в одно поле table1 сумму двух полей table2
CODE | insert into table1 (value)
value (table2.val1 + table2.val2) |
такая штука не работает, не подскажете в чем дело? |
|
Valdemar |
Отправлено: 10.11.2004, 11:49 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Возможно потому, что название поля, в которое вы пишете сумму, совпадает с зарезервированным словом VALUE. |
|
telepath |
Отправлено: 10.11.2004, 12:03 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
value это для примера |
|
Gedeon |
Отправлено: 10.11.2004, 12:13 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
См. хэлп
QUOTE |
INSERT INTO MyTable (PriKey, Description)
VALUES (123, 'A description of part 123.')
|
|
|
AVC |
Отправлено: 10.11.2004, 12:20 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE | insert into table1 (value) value (table2.val1 + table2.val2) |
Как по вашему, из какой строки(строк) table2 должны браться значения?
Правильно так
Insert Into table1 (field_name) Select val1+val2 From table2 Where ...
Вставляется столько строк, сколько возвращает подзапрос (ли нужно использовать агрегатные функции) |
|
telepath |
Отправлено: 10.11.2004, 12:24 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Сорри, была опечатка. Код выглядит так
QUOTE | insert into LOGS (ID_REC, TYPE_CHANGE, CODE)
values (old.ID, 'change', (RESTABLE.N1 + RESTABLE.N2)); |
,где
ID_REC integer,
TYPE_CHANGE varchar(25),
CODE varchar(6),
N1 varchar(1),
N2 varchar(1)
А строка известна, она в переменной OLD
Отредактировано telepath — 10/11/2004, 13:27 |
|
AVC |
Отправлено: 10.11.2004, 13:23 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Sorry Книжка придавила клавишу.
Отредактировано AVC — 10/11/2004, 13:27 |
|
AVC |
Отправлено: 10.11.2004, 13:29 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE | А строка известна, она в переменной OLD |
Она известна вам, но ни как не серверу. Подствьте в insert значение из своей строки (Gedeon) или заставьте сервер снова найти её (я) |
|
Gedeon |
Отправлено: 10.11.2004, 14:04 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (AVC @ 10/11/2004, 13:22) | Как по вашему, из какой строки(строк) table2 должны браться значения? |
О, блин, а я первое что нашел и дальше смотреть даже не стал.
|
|
telepath |
Отправлено: 10.11.2004, 14:19 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Это должно срабатывать перед изменением конкретной записи в table2 на триггере, и старое значение изменяемой строки вставляться в table1 разве в old не будет храниться запись до изменения? |
|
AVC |
Отправлено: 10.11.2004, 15:21 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
Хочу вставить в одно поле table1 сумму двух полей table2
...
разве в old не будет храниться запись до изменения?
|
Будет, но для table2. Т.е. в old хранятся значения полей только tabl2. Для решения проблемы вам нужно в триггере выполнить запрос типа
Upadate table1 Set field = new.val1 + new.val2 Where table1.primary_key = ...
или
Upadate table1 Set
field = field — old.val1-old.val2 + new.val1 + new.val2
Where table1.primary_key = ...
Кстати, вопрос из вашего первого поста противоречит последнему.
2Gedeon
А я, когда читал, value вместо values просто сразу не увидел |
|