Копирование данных по наступлению определённой даты

Запросы, планы, оптимизация запросов, ...

Модераторы: 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

:cry: Это ж азбука.

Код: Выделить всё

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$ пускать :wink:

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

Сообщение smily » 30 ноя 2006, 14:07

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

Ответить