Использование RDB$DB_KEY в ХП

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

Модераторы: kdv, CyberMax

Ответить
Demiurg
Сообщения: 14
Зарегистрирован: 02 дек 2005, 13:25

Использование RDB$DB_KEY в ХП

Сообщение Demiurg » 02 дек 2005, 13:34

Нужно убрать из рабочей таблицы записи с возрастом более Х дней.
Сваял такую процедуру:

BEGIN
FOR SELECT RDB$DB_KEY, current_date-cast(gmt as date) FROM data
INTO :rowid, :days
DO BEGIN
IF (:days>400) then
begin
insert into data_old
select * from data where RDB$DB_KEY=:rowid; <- вот тут засада
//тут будет удаление - пока в тесте не делаю
end
END
END

Короче нефига это решение не вставляет :)
Проблема в том, что не понятно какого типа должна быть переменная :rowid чтоб нормально с ней работать. Или любой другой способ идентификации строки в таблице, плиз.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 02 дек 2005, 14:03

А primary key на табице иметь и пользовать - не кошерно?

Demiurg
Сообщения: 14
Зарегистрирован: 02 дек 2005, 13:25

Ё

Сообщение Demiurg » 02 дек 2005, 14:16

Ну я типа так и извернулся в данном случае. Так что не серчай, всемогущий :)
Но вот если нет PK, то тогда как?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 02 дек 2005, 14:20

тогда его надо добавить... или это логи в базу слиты?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Re: Ё

Сообщение Merlin » 02 дек 2005, 14:25

Demiurg писал(а): Но вот если нет PK, то тогда как?
Согласен с предыдущим оратором. Кстати, никто не мешает и на логе сделать синтетический ПК на генераторе и триггере. Жрать не просит, а пригодиться может. Но если душа уж очинно просит магии, то бегом на http://www.cvalde.net , набрать там в поиске rdb$db_key и читать многотрюмную сагу известного волшебника по этому поводу.

Demiurg
Сообщения: 14
Зарегистрирован: 02 дек 2005, 13:25

да уж

Сообщение Demiurg » 02 дек 2005, 15:32

Не в магии дело. Просто я в Оракле к rowid привык - вот и хотелось сходным образом задачку решить.
Ну всем спасибо за внимание - пойду стойку с серверами ронять - по одному что-то уже тоскливо :)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Использование RDB$DB_KEY в ХП

Сообщение hvlad » 02 дек 2005, 18:52

Я фигею, а что, простых путей мы не ищем ?

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

insert into data_old
select * from data
 where current_date-cast(gmt as date) > 400

delete from data
 where current_date-cast(gmt as date) > 400
Demiurg писал(а):Проблема в том, что не понятно какого типа должна быть переменная :rowid чтоб нормально с ней работать
char( 8 )

Ответить