Ciao ragazzi,
come da titolo avrei la necessita di duplicare una tabella ma di darle un mome diverso.
Ovviamente vorrei evitare un classico replace nel file sql. Esiste qualche funzione sql che permette di fare una cosa del genere?
Ciao ragazzi,
come da titolo avrei la necessita di duplicare una tabella ma di darle un mome diverso.
Ovviamente vorrei evitare un classico replace nel file sql. Esiste qualche funzione sql che permette di fare una cosa del genere?
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
chissa' se ho capito bene:Originariamente inviato da ciro78
Ciao ragazzi,
come da titolo avrei la necessita di duplicare una tabella ma di darle un mome diverso.
Ovviamente vorrei evitare un classico replace nel file sql. Esiste qualche funzione sql che permette di fare una cosa del genere?
poi devi solo creare gli indici.codice:create table nuova select * from vecchia
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
ciao piero,
grazie per la risposta. ma in questo modo sono costretto a farne una per volta. siccome debbo duplicarne 84 x 4 volte cercavo una soluzione più rapida
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
Allora ti serve una stored procedure.Originariamente inviato da ciro78
ciao piero,
grazie per la risposta. ma in questo modo sono costretto a farne una per volta. siccome debbo duplicarne 84 x 4 volte cercavo una soluzione più rapida
Il risultato che cerchi è quello dell'esempio di Piero? Devi cioè copiare anche il contenuto o devi solo ricreare la struttura?
Le tabelle nuove è sufficiente che abbiano lo stesso nome più un suffisso numerico rispetto al nome originale?
si il risultato è ovviamente quello di piero. dati e struttura
più che suffisso dovrebbe essere una cosa del genere
db1_tab1 -> db2_tab1
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
Ma quindi queste tabelle devono essere create in un db diverso da quello che contiene le tabelle da copiare?
ehm noin quel caso copiavo il database
db1 è il prefisso della tabella. l'ho messo io a caso per intendere che quello che deve cambiare nella nomenclatura è appunto il prefisso. poteva essere anche pippo1 e pippo2
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
Ok, ti faccio ancora un paio di domande e poi vedo di aiutarti a trovare la soluzione.Originariamente inviato da ciro78
ehm noin quel caso copiavo il database
db1 è il prefisso della tabella. l'ho messo io a caso per intendere che quello che deve cambiare nella nomenclatura è appunto il prefisso. poteva essere anche pippo1 e pippo2![]()
Le 84 tabelle che devi copiare è l'esatto numero che compongono il db?
Te lo chiedo per sapere se è possibile interrogare l'information_schema limitandoci a recuperarle tutte o se sono delle tabelle specifiche che andrebbero quindi esplicitate in fase di query.
Ultima domanda: una volta recuperate le tabelle si procede alla creazione delle copie (4 per ciascuna tabella se ho capito bene).
Se la prima tabella si chiama db1_tab1 come devo rinominare le 4 copie, db2_tab1,db3_tab1,db4_tab1 e db5_tab1 e idem per tutte le altre 83?
il numero esatto è 81
si, il sistema che hai usato va bene per rinominarle
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
Fai i tuoi test su una copia del db.codice:delimiter // drop procedure if exists copia_tabelle // create procedure copia_tabelle() begin declare finito int default 0; declare i int; declare str varchar(200); declare qry varchar(1000); declare cur_tabelle cursor for select table_name from information_schema.tables where table_schema = database() and table_type = 'base table'; declare continue handler for not found set finito = 1; open cur_tabelle; mio_loop:loop fetch cur_tabelle into str; if finito = 1 then leave mio_loop; end if; set i = 2; while i<=5 do set @qry = concat("create table db",i,"_",str," select * from ", str); prepare stmt from @qry; execute stmt; deallocate prepare stmt; set i = i + 1; end while; end loop; close cur_tabelle; end // delimiter ; call copia_tabelle()![]()