Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
smily
- Сообщения: 11
- Зарегистрирован: 26 окт 2006, 10:47
Сообщение
smily » 08 ноя 2006, 16:50
СУБД FIREBIRD.
Мне необходимо копировать данные из одной таблицы в другугю, но только те которые в поле типа DATE содержат текущую дату. Копирование должно происходить автоматически.
Каким образом мне можно это сделать?
Помогите пжлста, очень надо!!
Заранее пасибки.
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 08 ноя 2006, 17:00
Ответ зависит от того, что ты подразумеваешь под "автоматически".
Если это определённое время/интервал, то без шедулера и запуска скрипта тем же isql не обойтись.
Если достаточно "хотя бы раз в день", то можно такой функционал доверить первому прицепившемуся к базе клиенту.
-
smily
- Сообщения: 11
- Зарегистрирован: 26 окт 2006, 10:47
Сообщение
smily » 08 ноя 2006, 18:13
автоматически, ну то есть к примеру, при обращении к бд происходит проверка таблицы TABLE1 которая имеет поля
Data типа smallint
Date типа date.
если Date=текущая дата то записать DATA в таблицу TABLE2
Что то типа этого
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 08 ноя 2006, 18:20
smily писал(а):при обращении к бд
Всё равно непонятно. Обращении кем или чем?
В том описании, как ты написал, может, проще навесить триггер, который при вставке сразу будет копировать данные в другую таблицу?
-
smily
- Сообщения: 11
- Зарегистрирован: 26 окт 2006, 10:47
Сообщение
smily » 08 ноя 2006, 18:24
ну да мне это и нужно, проблема в том как этот тригер должен выглядеть, не могу допетрить
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 08 ноя 2006, 18:59

Это ж азбука.
Код: Выделить всё
create trigger ... for table1 ... after insert ...
as begin
insert into table2 (id, data) values (new.id, new.data);
end
create trigger ... for table1 ... after update ...
as begin
if new.data != old.data then
update table2 set data=new.data where id=new.id;
end
-
smily
- Сообщения: 11
- Зарегистрирован: 26 окт 2006, 10:47
Сообщение
smily » 09 ноя 2006, 08:37
ок.
ща испробую.
насчёт азбука-может быть, я пока ламер, просто не знал как можно дату текущую выдернуть.
пасиб за оперативный ответ

.
-
smily
- Сообщения: 11
- Зарегистрирован: 26 окт 2006, 10:47
Сообщение
smily » 28 ноя 2006, 18:29
млин опять запара. Люди добрые как мона в триггере получить текущую дату?
-
Attid
- Спец
- Сообщения: 377
- Зарегистрирован: 14 ноя 2006, 09:58
Сообщение
Attid » 28 ноя 2006, 19:24
smily писал(а):млин опять запара. Люди добрые как мона в триггере получить текущую дату?
вариант 1
current_date
вариант 2
select cast('now' as date) from rdb$database into .. .
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 28 ноя 2006, 20:14
Attid писал(а):вариант 1
current_date
вариант 2
select cast('now' as date) from rdb$database into .. .
Во-первых, раз уж current_date, то 'TODAY', а не 'NOW'.
Во-вторых, зачем делать select from rdb$database, если можно напрямую значение использовать?
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 28 ноя 2006, 20:24
Видать чтоб улыбчивый поменьше в другой раз тараторил, а побольше читал доку

-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 28 ноя 2006, 21:15
Merlin писал(а):а побольше читал доку

Всё равно ещё рано к RDB$ пускать

-
smily
- Сообщения: 11
- Зарегистрирован: 26 окт 2006, 10:47
Сообщение
smily » 30 ноя 2006, 14:07

пасиб за советы. А инфу читаю, читаю ).