Страница 1 из 1

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

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

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 чтоб нормально с ней работать. Или любой другой способ идентификации строки в таблице, плиз.

Добавлено: 02 дек 2005, 14:03
Merlin
А primary key на табице иметь и пользовать - не кошерно?

Ё

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

Добавлено: 02 дек 2005, 14:20
Ivan_Pisarevsky
тогда его надо добавить... или это логи в базу слиты?

Re: Ё

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

да уж

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

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

Добавлено: 02 дек 2005, 18:52
hvlad
Я фигею, а что, простых путей мы не ищем ?

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

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 )