feb
18
2012
Hoy necesité renombrar una tabla en Firebird. Por lo general lo hago en otras bases de datos (que por cierto no suele ser tan fácil en la mayoría de motores de bases de datos) y Firebird no es la excepción, pero encontré la respuesta para casos en que no haya otra opción (que son muy pocos a decir verdad).
NOTA: No hacer COMMIT hasta que no se hayan ejecutado AMBOS comandos.
UPDATE RDB$RELATIONS
SET RDB$RELATION_NAME='NEWNAME' where
RDB$RELATION_NAME='OLDNAME';
UPDATE RDB$RELATION_FIELDS
SET RDB$RELATION_NAME='NEWNAME' where
RDB$RELATION_NAME='OLDNAME' and
RDB$SYSTEM_FLAG=0;
Se hace COMMIT y listo, tabla renombrada. Cabe agregar que después de hacer la prueba noté que las llaves (incluyendo la primaria) y los contraints se habían perdido, así que necesitaremos recrearlos en caso de ser necesario.
Pienso que se debería hacer en un caso MUY extremo, por lo demás, es más fácil (y seguro) pasar los datos a otra tabla con el nuevo nombre.
Fuente: DevShed
no comments | tags: firebird | posted in Bases de Datos
feb
16
2012
Ordenar campos en una base de datos no suele ser problema en ningún motor hasta que llegamos a MySQL, precisamente hoy me encontré con ese problema, porque necesité ordenar una tabla usando una columna que contenía valores NULL, pero además de ellos necesité que si existía un valor nulo, éste tendría que ir al final (y no al principio como noté que sucedía). En otros motores de base de datos, ésto no suele ser un problema, pero vaya que lo es en MySQL (no estoy seguro si en MariaDB se presenta también, pero asumo que sí).
La situación es esta:
MySQL considera a los valores NULL menor que los enteros a menos que la columna esté con signo negativo (Característica no documentada)
Sí señor, así como suena, no está documentado cómo solucionar este problema, aunque sí está la nota que dice que: Los valores NULL en un order by ascendente aparecerán primero.
Por lo anterior me puse a la tarea de encontrar una forma (que no incluyera una subconsulta por cuestiones de rendimiento) para resolver este problema.
La solución la encontré en esta página, pero con el ejemplo en lenguaje Ruby:
Anteponemos el símbolo menos (-) a la columna con los campos nulos en la sección ORDER BY de la consulta e indicamos el sentido contrario del ordenamiento (ASC en lugar de DESC y viceversa)… He aquí un ejemplo para organizar ascendentemente a “campo1″ de la tabla “ejemplo”
SELECT *
FROM ejemplo
ORDER BY -campo DESC
Espero que les sea de ayuda.
no comments | tags: bases de datos, mysql, sql | posted in Bases de Datos