Ich habe eine Reihe von Tabellen namens result_%, alle mit der gleichen Struktur.Abfrageergebnisse ausführen
Ich möchte diesen Tabellen einen Index hinzufügen.
kann ich die ALTER-Anweisung für jede Tabelle als eine Reihe von einer Auswahlabfrage Ergebnis bekommen, aber ich weiß nicht, wie diese Anweisungen auszuführen:
select concat('alter table ', test_db.table_name, ' add index `did` (`did`);') as statement
from information_schema.tables test_db
where test_db.table_name like 'results_%';
Was bin ich?
Der Ausgang (was ich stattdessen ausführen möchte es mir nur noch angezeigt):
+---------------------------------------------------------+
| statement |
+---------------------------------------------------------+
| alter table results_Em7777_spa add index `did` (`did`); |
| alter table results_KaEng_eng add index `did` (`did`); |
| alter table results_Ka_spa add index `did` (`did`); |
| alter table results_Mc_spa add index `did` (`did`); |
| alter table results_Mo_eng add index `did` (`did`); |
| alter table results_Pe_eng add index `did` (`did`); |
| alter table results_SU_spa add index `did` (`did`); |
| alter table results_Ta_spa add index `did` (`did`); |
| alter table results_ba_eng add index `did` (`did`); |
| alter table results_br_eng add index `did` (`did`); |
| alter table results_ca_spa add index `did` (`did`); |
| alter table results_ch_spa add index `did` (`did`); |
| alter table results_da_spa add index `did` (`did`); |
| alter table results_ga_eng add index `did` (`did`); |
| alter table results_ge_spa add index `did` (`did`); |
| alter table results_gk_eng add index `did` (`did`); |
+---------------------------------------------------------+
16 rows in set (0.00 sec)
[EDIT]
Ich habe versucht:
drop procedure if exists altlike;
delimiter //
create procedure altlike()
begin
set group_concat_max_len = 65535;
select @altrlk:= concat('alter table ', test_db.table_name , ' add index `did` (`did`);')
from information_schema.tables test_db
where test_db.table_name like "results_%";
prepare statement from @altrlk;
execute statement;
end //
delimiter ;
call altlike();
aber noch keine Glück: Es ändert nur die letzte übereinstimmende Tabelle (results_gk_eng).
könnten Sie versuchen, Prepare/execute-: http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html – zerkms
Ich dachte auch, dass würde die Idee sein, aber nach dem Lesen der Dokumentation kann ich immer noch nicht herausfinden, wie man sie dafür benutzt. – NotGaeL
Was ist das Problem? Schreiben Sie eine Prozedur, die über die Ergebnismenge iteriert und Zeile für Zeile ausführt – zerkms