Exención de responsabilidad: No soy un Rubí-on-Rails programador
estrictamente en términos de MySQL, que básicamente tienen dos formas de extraer procedimientos almacenados (SP) y funciones almacenadas (SF).
Tenga en cuenta que mysql.proc y information_schema.routines proporcionan la carcasa en el disco y en la memoria para los SP. Sin embargo, hay 2 declaraciones SQL para recuperarlas: SHOW CREATE PROCEDURE y SHOW CREATE FUNCTION.
La primera forma consiste en recopilar todos los SP y SF utilizando mysql.proc y formarlos en sentencias de SQL que los expongan.
Ejemplo Tengo 6 SP y 2 SF en mi base de datos de prueba. Aquí es cómo generar SQL para los 8 rutinas:
mysql> SELECT CONCAT('SHOW CREATE ',type,' `',db,'`.`',name,'`\\G') SQLStatements FROM mysql.proc;
+-----------------------------------------------------+
| SQLStatements |
+-----------------------------------------------------+
| SHOW CREATE PROCEDURE `test`.`CreateSampleTable`\G |
| SHOW CREATE PROCEDURE `test`.`CreateSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`GetMissingIntegers`\G |
| SHOW CREATE FUNCTION `test`.`GetTestTableCounts`\G |
| SHOW CREATE PROCEDURE `test`.`ImportWeeklyBatch`\G |
| SHOW CREATE FUNCTION `test`.`InsertName`\G |
| SHOW CREATE PROCEDURE `test`.`LoadSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`MigrateColumn`\G |
+-----------------------------------------------------+
8 rows in set (0.00 sec)
Puede desplazarse a través y recoger el código necesario para cada procedimiento y función almacenada.
Los disparadores se deben recoger por separado.
En MySQL 5.x puede obtener desencadenantes utilizando esta consulta:
mysql> SELECT CONCAT('SHOW CREATE TRIGGER `',trigger_schema,'`.`',trigger_name,'`\\G') SQLStatements FROM information_schema.triggers;
+--------------------------------------------------+
| SQLStatements |
+--------------------------------------------------+
| SHOW CREATE TRIGGER `test`.`AddPermTempKey`\G |
| SHOW CREATE TRIGGER `test`.`DeletePermTempKey`\G |
+--------------------------------------------------+
o para ahorrar tiempo UNIÓN las dos sentencias SQL
mysql> SELECT CONCAT('SHOW CREATE ',type,' `',db,'`.`',name,'`\\G') SQLStatements FROM mysql.proc UNION SELECT CONCAT('SHOW CREATE TRIGGER `',trigger_schema,'`.`',trigger_name,'`\\G') SQLStatements FROM information_schema.triggers;
+-----------------------------------------------------+
| SQLStatements |
+-----------------------------------------------------+
| SHOW CREATE PROCEDURE `test`.`CreateSampleTable`\G |
| SHOW CREATE PROCEDURE `test`.`CreateSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`GetMissingIntegers`\G |
| SHOW CREATE FUNCTION `test`.`GetTestTableCounts`\G |
| SHOW CREATE PROCEDURE `test`.`ImportWeeklyBatch`\G |
| SHOW CREATE FUNCTION `test`.`InsertName`\G |
| SHOW CREATE PROCEDURE `test`.`LoadSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`MigrateColumn`\G |
| SHOW CREATE TRIGGER `test`.`AddPermTempKey`\G |
| SHOW CREATE TRIGGER `test`.`DeletePermTempKey`\G |
+-----------------------------------------------------+
10 rows in set (0.07 sec)
La segunda forma es la forma preferida para los administradores de bases, usando mysqldump.
Esto recogerá todas las estructuras de tablas, SP, SF y desencadenantes en un solo archivo.
mysqldump -h... -u... -p... --no-data --routines --triggers --all-databases > MySQLSchema.sql
Esto hará lo mismo pero sin el material CREATE TABLE:
mysqldump -h... -u... -p... --no-data --no-create-info --routines --triggers --all-databases > MySQLSchema.sql
dar a estos a Try !!!
¡Me gustaría saberlo también! –
No sé si esto es lo que necesita, pero puede usar la tabla ** information_schema.routines ** para volcar sus funciones y procedimientos. – rMX
Puede usar mysql.proc y information_schema.triggers como mi respuesta lo señala. – RolandoMySQLDBA