Удалить записи из таблицы по условию

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Удалить записи из таблицы по условию

Сообщение rozum »

Добрый день всем!За ранее прошу прощения ,если такая тема уже обсуждалась,но... Подскажите пожалуйста как можно почистить(удалить данные из таблицы внешних атрибутов Attrval) за определенный период и с условием .Пробую вот таким образом и в итоге окно модификации данных крутит но данные не удаляет ,а почистить необходимо,сама таблица attrval уже 21гб.
DELETE attrval
where
((
word(1104) /== AttrVal.wtable
and comp(000100000000000Dh) /== AttrVal.cAttrNam
and AttrVal.crec /== Spstep.nrec
and spstep.cstepdoc /== stepdoc.nrec
and stepdoc.cbasedoc /== basedoc.nrec
and date(30,01,2007) <<= basedoc.ddoc (NoIndex)
and date(31,12,2007) >>= basedoc.ddoc (NoIndex)
))
;
Может быть я синтаксис не так пишу.Через rebuild тоже не отрабатывает( не видит ^ )
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Удалить записи из таблицы по условию

Сообщение edward_K »

1. Перед delete всегда проверяйте select - ом - есть ли что.
2. delete на таких сложных условиях на ранних версиях мог отработать не корректно(в обе стороны - как не доудалить, так и удалить все).
3. Удаляемая таблица должна быть главной, но здесь вы это выполняете.
4. Универсальное средство сделать выгрузку в txt запросов на удаление одной записи и потом выполнить файло в сапорте. медленно, но зато надежно

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

select 'delete attrval where (('+string(attrval.nrec)+' == nrec ));'
...
to txt c:\1\attrval_del.txt
;
#include c:\1\attrval_del.txt
5. причем тут rebuild? у вас первасив? rebuild -у нужно указывать конкретный файл. где то в галке лежит батник для лечения таблиц(ы) - посмотрите.
альтернатива - выгрузить все в dbf, переместить файл данных, загрузить из dbf. Ест. при этом никто не должен находиться в базе.
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Удалить записи из таблицы по условию

Сообщение rozum »

да у нас pervasive. вычислять по одной записи это будет ну оочень долго((((((( может буду искать ещё какие варианты
записи 100% есть потому что select выгружает за 1 месяц 20.000 записей которые и нужно убрать но скопом всё удалять нельзя поэтому и опираюсь на даты и подцепки((
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Удалить записи из таблицы по условию

Сообщение edward_K »

да ладно - можно и потерпеть. 20000 будет удалять минут 10 максимум. Вот если два ляма тогда другое дело.
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Удалить записи из таблицы по условию

Сообщение rozum »

так вот в том то и дело что за 2007 год это уже 250.000 а мне необходимо с 2007 по 2012 удалить.причем где то с 2008 года уже не один атрибут а 4 то есть это уже в 4 раза будет больше записей.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Удалить записи из таблицы по условию

Сообщение Den »

прям именно sql-запросом ?
напишите простенький алгоритм на vip или fcom может...
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Удалить записи из таблицы по условию

Сообщение rozum »

я про это уже тоже подумала)) спасибо.Но все таки одну небольшую ошибочку нашла в запросе.)))) прописала не тот nrec :x но думаю записать процедуру придеться
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Удалить записи из таблицы по условию

Сообщение Алексей »

сложные удаления тоже всегда на випе пишу...
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Удалить записи из таблицы по условию

Сообщение RAJAH »

Алексей писал(а):сложные удаления тоже всегда на випе пишу...
Тоже примажусь к обсуждению: а я на T-SQL. :-P
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Удалить записи из таблицы по условию

Сообщение rozum »

подскажите ещё кто сталкивался! select у меня отрабатывает, но так как запрос непроиндексирован, то записи выбираются ооочень долго, то есть поиск бежит по всем записям(а это 16млн)), после часа модификации, я прерываю процесс :oops: ,и в итоге вижу,что вроде бы записи удаляются достаточно хорошо а вот сам размер таблицы не уменьшается.То есть либо у меня не хватает терпения дождаться полного окончания модификации ,либо ситуация такая, что записи якобы удаляются а на физическом уровне может просто ставятся, как помеченные на удаление.Пробую экспортнуть в dbf а затем импорт в базу.Или я не совсем понимаю как проходит удаление(((
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Удалить записи из таблицы по условию

Сообщение edward_K »

читайте внимательно, что я вам писал, а не через слово. В промежутке между выгрузкой и загрузкой надо физически удалить файл(переместить куда то).
или rebuild - все это делать когда никого нет в базе.
Первасив не умеет сжимать в каком то другом режиме файлы кроме rebuild-а. В MSSQL файлов всего 5 - и можно в фоне запустить их сжатие всех или нужный.
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Удалить записи из таблицы по условию

Сообщение rozum »

Sorry :oops: догнала ,последую совету.Спасибо
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Удалить записи из таблицы по условию

Сообщение rozum »

Простите уже опытные программисты новичка :oops: но подскажите ещё плиз по какому критерию можно разбить таблицу Atttrval чтобы экспортировать её? Не поддерживает dbf 20Гб (или я ещё не умею правильно выгружать ) можно ли создать vip в котором описать какую то переменную присвоить ей 1 и в цикле прописать что выгружать с 1 например до 4 млн. записей.в итоге получиться где то 5 файлов dbf которые потом и можно импортировать обратно.Или есть какой нибудь критерий отбора для выгрузки полегче?
Сразу прошу прощения и говорю спасибо)))
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Удалить записи из таблицы по условию

Сообщение Den »

rozum писал(а):можно ли создать vip в котором описать какую то переменную присвоить ей 1 и в цикле прописать что выгружать с 1 например до 4 млн. записей.
можно
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Удалить записи из таблицы по условию

Сообщение edward_K »

Тут проще по atl_lastdate резать. А с rebuild не разо брались?
Ответить