Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/04/2016, 07:50
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Función comprobar existencia tabla (nombre tabla por parámetro)

Hola andelval:

el problema es que estas concatenando comillas al nombre de la tabla, es decir no es lo mismo 'tabla' que tabla...

checa este ejemplo. Supongamos que queremos buscar la tabla1 en el esquema pruebas, entonces hacemos esto:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   table_schema, table_name, ENGINE, table_rows
  3.     -> FROM information_schema.TABLES
  4.     -> WHERE
  5.     ->   table_schema = 'pruebas' AND
  6.     ->   table_name = 'tabla1';
  7. +--------------+------------+--------+------------+
  8. | table_schema | table_name | ENGINE | table_rows |
  9. +--------------+------------+--------+------------+
  10. | pruebas      | tabla1     | InnoDB |          2 |
  11. +--------------+------------+--------+------------+
  12. 1 row in set (0.00 sec)

Lo que tú estás haciendo equivale a poner algo así:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   table_schema, table_name, ENGINE, table_rows
  3.     -> FROM information_schema.TABLES
  4.     -> WHERE
  5.     ->   table_schema = 'pruebas' AND
  6.     ->   table_name = '''tabla1''';
  7. Empty set (0.00 sec)

por lo tanto encontrarás la tabla sólo si el nombre de la misma incluyera las comillas.

Intenta quitando el CONCAT que tienes en la asignación de tu variable:

Código MySQL:
Ver original
  1. mysql> SET @cuTable = 'tabla1';
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT
  5.     ->   table_schema, table_name, ENGINE, table_rows
  6.     -> FROM information_schema.TABLES
  7.     -> WHERE
  8.     ->   table_schema = 'pruebas' AND
  9.     ->   table_name = @cuTable;
  10. +--------------+------------+--------+------------+
  11. | table_schema | table_name | ENGINE | table_rows |
  12. +--------------+------------+--------+------------+
  13. | pruebas      | tabla1     | InnoDB |          2 |
  14. +--------------+------------+--------+------------+
  15. 1 row in set (0.00 sec)

O si lo prefieres con SELECT :=

Código MySQL:
Ver original
  1. mysql> SELECT @cuTable:='tabla2';
  2. +--------------------+
  3. | @cuTable:='tabla2' |
  4. +--------------------+
  5. | tabla2             |
  6. +--------------------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql> SELECT
  10.     ->   table_schema, table_name, ENGINE, table_rows
  11.     -> FROM information_schema.TABLES
  12.     -> WHERE
  13.     ->   table_schema = 'pruebas' AND
  14.     ->   table_name = @cuTable;
  15. +--------------+------------+--------+------------+
  16. | table_schema | table_name | ENGINE | table_rows |
  17. +--------------+------------+--------+------------+
  18. | pruebas      | tabla2     | InnoDB |          9 |
  19. +--------------+------------+--------+------------+
  20. 1 row in set (0.00 sec)

Saludos
Leo.