powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Цикл в Mysq с параметрами
23 сообщений из 23, страница 1 из 1
Цикл в Mysq с параметрами
    #39478950
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте друзья-товарищи) Помогите решить проблему. У меня есть таблица содержающая название других таблиц.
Эти таблицы в ручную сидеть очищать устал, тем более это надо делать каждый месяц. Подкиньте решение для процедуры очистки данных таблиц. Я понимаю что название таблиц надо поставить в параметр. Но сколько не колдовал у меня не получается.
То есть на примере: у меня есть таблица TABLE_MAIN со столбцами(id, table_title,..) и таблицы table_1, table_2, table_3.
Названия таблиц table_1, table_2, table_3 хранятся в TABLE_MAIN в столбце table_title.
Надо чтобы процедура брала названия и table_title и в цикле очищала соответствующие таблицы.
Помогите плиз)
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39478956
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akex,
может также как тут https://habrahabr.ru/post/52983/ ?
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39478958
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо щас попытаюсь по колдовать)
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39478969
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
список таблиц как часто меняется?
если очистка данных делается раз в месяц, может проще будет подключить ОС?
одним запросом генерировать файл со списком delete-ов, и вторым запускать его на выполнение.
https://phpclub.ru/mysql/doc/batch-commands.html
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39478972
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Darkripple,
Список таблиц постоянная.
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39478986
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkexСписок таблиц постоянная. так если он постоянный - сделать один раз процедуру очистки и запускать её, хоть вручную, хоть по расписанию...
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39478997
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Darkripple,
Че то лень 150 таблиц сидеть объявлять)))
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479002
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Darkripple,

Понимаю что надо через CONCAT
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479004
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akex,
а каждый месяц руками удалять не лень?
Код: sql
1.
select concat('delete from ',table_title,';') from TABLE_MAIN;

ctrl+c, ctrl+v
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479015
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаблон (довести до ума самостоятельно)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create procedure clear
begin
declare done int default 1;
declare tname varchar(64);
declare cursor cur as select table_title from table_main;
declare continue handler for not found set done=0;

open cur;
fetch cur into tname;
while done
  prepare stmt from concat('truncate ',tname,';');
  exec stmt;
  deallocate stmt;
  fetch cur into tname;
end while;
close cur;
end;
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479025
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Darkripple, может конечно я туповат..... Вроде возвращает
+----------------------------------------+
| concat('delete*from ',table_title,';') |
+----------------------------------------+
| delete*from analiz_alt; |
| delete*from analiz_act; |
+----------------------------------------+
2 rows in set (0.00 sec).
А как запустить процесс удаления?
P/S
напиши электронный счет свой закину за помощь 200 рублей)
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479028
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
пишет ошибка в 9 линий!
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479037
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akex , я же явно указал, что нужно сделать с кодом:
Akinaдовести до ума самостоятельно
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479046
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Блин я реально туповат)))) Помоги, мне не жалко 200 рублей чтобы избавиться от мучений) Тебе 5 секунд а мне целый день может забрать, чтобы понять как работает курсор. Напиши свой электронный счет закину или на телефон положу(звонить не буду, обещаю)
Я же понимаю что Вы тратите свое время. А я из за свое глупости каждый месяц мучаюсь)
Поэтому 200 рублей не жалко) только бы освободиться от этого морока....
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479051
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Напиши номер счета или телефон на andreev.kol1992@yandex.ru
Перечислю. Только ПОМОГИТЕ)
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479071
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkexDarkripple, может конечно я туповат..... Вроде возвращает
| delete*from analiz_alt; в моём примере звёздочек не было.
AkexА как запустить процесс удаления?
также как и селекты запускаешь.
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479114
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akexпишет ошибка в 9 линий!ссылка раз про курсоры
ссылка два про динамический sql
в скрипте от Akina нужно местами поправить синтаксис (см примеры в ссылках) и самой процедуре при создании скобочек не хватает.
P.S. для меня было неочевидно, что в процедуре препарировать можно только локальные переменные (по крайней мере мой dbForge отказался препарировать конкатенацию), поэтому сработало так:
Код: plsql
1.
2.
  set @ssss = concat('truncate ',tname,';');
  PREPARE stmt FROM @ssss;
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479123
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Darkripple,
Большое спасибо) напиши на почту andreev.kol1992@yandex.ru свой электронный счет или телефон.
перечислю за помощь 300 рублей. Спасибо огромное.Буду ждать твоих реквизитов.
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479194
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Darkripple,
Все разобрался написал процедуру. Теперь загадка века. Почему в EMS Mysql managere процедура не выполняется а в phpMysqlAdmin
процедура работает отлично.
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479202
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Darkripple,
Еще маленькая проблема
BEGIN
DECLARE done integer default 1;
DECLARE name1 varchar(64);
DECLARE table_name varchar(64);
DECLARE table_main varchar(64);
DECLARE cur1 cursor for select `name`, table_title, typeA from `spisok`;
declare continue handler for sqlstate '02000' set done=0;
open cur1;
while done=1 DO
fetch cur1 into name1, table_name, table_main;
set @ssss = concat('insert into ',table_name,'(UID,resultat) VALUES(2,4);');
PREPARE stmt FROM @ssss;
execute stmt;
end while;
close cur1;
END
почему в 1 таблицу вставляет 2 записи
а остальные по 1?
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479208
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akex,
т.е в последнюю.
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39479228
Akex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и почему сервер ругаеться на процедуру в цикле
BEGIN
DECLARE done integer default 1;
DECLARE name1 varchar(64);
DECLARE table_name varchar(64);
DECLARE table_main varchar(64);
DECLARE cur1 cursor for select `name`, table_title, typeA from `spisok_analizov`;
declare continue handler for sqlstate '02000' set done=0;
open cur1;
while done>0 DO
fetch cur1 into name1, table_name, table_main;
set @ssss = concat('insert into ',table_name,'(UID,date,resultat) select UID,data ',name1,' from ',table_main,';');
PREPARE stmt FROM @ssss;
execute stmt;
end while;
close cur1;
END


Column count doesn't match value count at row 1
...
Рейтинг: 0 / 0
Цикл в Mysq с параметрами
    #39481998
Darkripple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добавь в процедуру после всех деклараций
Код: sql
1.
declare exit handler for sqlexception set done = 0;

а после вызова процедуры сделай
Код: sql
1.
select @ssss;

увидишь код своего инсерта.
полагаю что раз он так ругается - что-то не то стоит в поле name одной из строк
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Цикл в Mysq с параметрами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]