Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 7

Delphi + Firebird (создание сервиса, хранимые процедуры)

28.02.2012, 22:42. Показов 3600. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Тут небольшая задачка есть.. Нужно написать сервис, который будет запускаться ночью автоматически, чтоб днем никому не мешать работать..

Есть БД Firebird (версия 1.5), в ней 24 таблицы.. Нужно
1) создать таблицу jornal_C_arch, которая будет точной копией jornal_C.
2) из jornal_C переносить в jornal_C_arch все, что старше 7 дней (но можно сделать и ежедневно, т.е. переносить все старше 1 дня).
3) из jornal_C_arch удалять всё старше 120 дней.
4) из таблицы Cashm удалять всё старше 45 дней.

С первым пунктом понятно. Просто создать новую таблицу в IBExpert, точную копию jornal_C, только пустую.. Потом подсказали написать хранимые процедуры, которые будут осуществлять удаление и копирование из таблиц.. Ну и, собственно, потом код на Delphi, в котором соответствующие процедуры будут вызываться.. В коде еще будет создание txt-файлов с логами (какого числа и во сколько сервис выполнил работу, успешно ли и т.д.)

Вся проблема в том, что я не имел дела с базами данных и как-то не представляю, как должны выглядеть требуемые хранимые процедуры. Также хотелось бы наверняка узнать, как должно осуществляться обращение к ним из среды Delphi. Вроде бы это делается с помощью компонентов FIB+.. Вобщем, очень надеюсь, что кого-нибудь не сильно затруднит, так сказать, "разжевать" мне этот материал..)) Буду очень благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2012, 22:42
Ответы с готовыми решениями:

Delphi и хранимые процедуры
Здравствуйте ! У меня следующая проблема - пишу хранимую процедуру в MSSQL тело которой имеет следующий вид SELECT * FROM...

Связать хранимые процедуры InterBase-а с Delphi
У меня много хранимых процедур(напр, insert_val). Как можно соединить их в приложении Дельфи, с помощью чего? Какие компоненты и свойства...

Вызов хранимой процедуры firebird из delphi
имеется автоматически созданная процедура в firebird: SET TERM ^ ; create or alter procedure SP_FROUP_TOVAR_INS ( ID integer,...

7
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
28.02.2012, 23:14
Для чего делать клоны таблиц?
Если речь не о десятках миллионов записей и выше, то ускорения вы все равно не получите. Особенно если индексы по делу настроены.
0
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 7
28.02.2012, 23:33  [ТС]
Ну таково задание.. Я сейчас на практике, сказали делать, вот и делаю.)
К тому же там либо компы слабые, либо записей реально ОЧЕНЬ много. По крайней мере при попытке отсортировать данные одной таблицы в IBExpert (допустим по алфавиту), комп завис 500-тысячной записи и выдал ошибку..
К тому же хотелось бы и самому реально разобраться на конкретном примере, как будут выглядеть эти процедуры и их вызовы..
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
29.02.2012, 00:15
Цитата Сообщение от Retar Посмотреть сообщение
По крайней мере при попытке отсортировать данные одной таблицы в IBExpert (допустим по алфавиту), комп завис 500-тысячной записи и выдал ошибку
Отсортировать можно и миллиард (особенно если индексы правильные есть), только зачем всю выборку на клиента тянуть, да в грид вываливать? Так никакой оперативы не хватит, да и скролить 500 тыс. записей - это часа три, если без роздыху
Вобщем, нужно понимать, что принципы работы с большими объемами данных совсем не те, что с малыми. И в первую очередь, следует ограничивать объем выборки, благо синтаксис SELECT позволяет (да и не одним способом). Ну и индексы, индексы, индексы...

Добавлено через 5 минут
вот фрагмент для размышлений:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
DECLARE variable DAT DATE;
BEGIN
  DAT = curent_date - 7;
 
  INSERT INTO jornal_C_arch(...)
  SELECT ...
    FROM jornal_C
   WHERE DAT<:DAT;
 
  DELETE
    FROM jornal_C
   WHERE DAT<:DAT;
END
но еще раз повторюсь - такой шардинг данных по таблицам - это непрофессионально.
0
39 / 71 / 10
Регистрация: 03.02.2012
Сообщений: 362
29.02.2012, 01:02
но еще раз повторюсь - такой шардинг данных по таблицам - это непрофессионально.
О да, тоже мне тут гуру баз данных из задрипанцив. Выучил одно слово. Шаринг,шмаринг.
Все правильно они делают. Сбрасывают устаревшие данные в архив.
Зачем постоянно делать фулскан по миллиону если реально используется 10%?

Не сравнивай куй с пальцем. Для Oracle и 10 миллионов фигня, а у них что?
А тот запрос, что ты нацарапал белым мелом уложит им firebird.

Тут надо удалять маленькими порциями или использовать утилиты экспорта/импорта. Если таковы имеются.
0
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
29.02.2012, 02:47
Я тоже придерживаюсь мнения perepe4a, ибо у самого был проект Где для расчетов использовались данные за 40 дней остальное все в историю. Джобы на каждый день.
Для ТС я бы сделал обратную операцию создал новую таблицу в нее дернул бы нужное. А старую таблицу переименовал в архив.
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
29.02.2012, 08:11
Цитата Сообщение от perepe4a Посмотреть сообщение
Зачем постоянно делать фулскан по миллиону если реально используется 10%?
Действительно, а зачем делать фулскан по миллиону? Окно отбора должно быть 50-100, ну 500 записей. И только по индексу. И тут уже практически не важно, из таблилицы-миллионика ты выбираешь, или из жалкого справочника.

Добавлено через 1 минуту
Цитата Сообщение от rdama Посмотреть сообщение
А старую таблицу переименовал в архив.
Таблицы в Firebird не переименовываются.

Добавлено через 8 минут
Цитата Сообщение от perepe4a Посмотреть сообщение
Тут надо удалять маленькими порциями или использовать утилиты экспорта/импорта
А разве специалист в курсе, что удаление в Firebird - намного более дорогая операция, чем вставка? Удаление порождает бек-версии, затем они становятся мусором, затем его нужно будет кому-то убрать: либо селективным запросам, не понимающим, почему они стали тормозить, либо периодически запускаемому свиперу, который притормозит уже всех. Тут нужно очень грамотно прибрать за собой после чистки журналов.
Но моя позиция таже: не плодите сущностей. В моей практике эксплуатируется 5й год firebird-база на 3 гига (не гигант, но уже что-то). Практически в каждом запросе для отчетов соединяются 3 тяжелые таблицы: стотысячник, миллионик и четырехмиллионик. И это соединение (join), а не выборка из одной таблицы с фильтрацией. На скорость никто не жаловался: запросы отрабатывают за 0.5-1 сек. Индексы!
1
 Аватар для rdama
569 / 292 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
29.02.2012, 08:59
Цитата Сообщение от arni Посмотреть сообщение
Таблицы в Firebird не переименовываются.
Не знал спасибо за инфу теперь. В сторону Огнептицы еще осторожнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.02.2012, 08:59
Помогаю со студенческими работами здесь

Создание хранимой процедуры, которая создает хранимые процедуры
Написать хранимую процедуру SQL , которая будет создавать хранимые процедуры(любые) для БД.

Создание процедуры из Delphi
Здравствуйте! Из программы Delphi нажатием кнопки создаются: файл базы данных, таблицы, поля в таблицах, триггер и генератор. Как только...

Хранимые процедуры
Читаю про хранимые процедуры. Пишут что они работают быстрее обычных запросов к бд, т.к хранимые процедуры выполняются на стороне сервера,...

Хранимые процедуры
Приветствую всех. Вот в чём вопрос создал я хранимую процедуру которая создаёт таблицу, вот как мне передать в неё имя таблицы? CREATE...

Хранимые процедуры
Помогите создать хранимую процедуру. Ни разу их не создавал - по ней и буду учиться. Дано: Таблица tema id: int (11) autoincrement ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru