El blog de Juan Palómez

28 octubre 2009

Copiar tablas / crear tablas con una SELECT / Copy tables

Filed under: Uncategorized — Etiquetas: , , , , — thisisoneball @ 01:37

Hay varias formas diferentes de copiar una tabla rápidamente, en una sola consulta SQL. Evitan tener que hacer un CREATE TABLE especificando todos los nombres y tipos de datos de los campos. No obstante sólo copian los campos, no los índices ni las constraints. Esta es una comparativa de ellas y los SGBD en los que funciona cada una:

Consulta Mysql Postgres Oracle Access HSQLDB Copia estructura Copia datos
CREATE TABLE destino AS SELECT * FROM origen Si Si Si No Si*** Si Si
CREATE TABLE destino LIKE origen Si** Si No No Si**** Si No
INSERT INTO destino SELECT * FROM origen Si Si Si Si Si No Si
SELECT * INTO destino FROM origen No Si* No Si No Si Si

* La documentación de Postgres recomienda usar CREATE TABLE AS mejor que SELECT INTO

** En MySQL esta instrucción copia todas las características de la tabla origen, incluidos los índices, comentarios, … Por lo tanto para hacer una copia idéntica lo mejor es CREATE TABLE destino LIKE origen + INSERT INTO destino SELECT * FROM origen

*** CREATE TABLE destino AS (SELECT * FROM origen) WITH DATA;

**** CREATE TABLE destino ( LIKE origen );

Esto también puede servir para copiar tablas entre distintos esquemas. Por ejemplo en MySQL:

CREATE TABLE esquema2.tabla AS SELECT * FROM esquema1.tabla;

18 octubre 2009

La ranita feliz

Filed under: Uncategorized — Etiquetas: , , , , — thisisoneball @ 15:00

Este es un programa que resuelve una de las pruebas del juego del MAME Puzzle & Action: Tant-R, en concreto la de la rana que tiene que ir pisando todas las casillas del tablero sin dejar ninguna sin pisar. Estas son algunas de las pantallas que te pueden salir:

tant0000 tantr tant0001

El programa muestra un tablero como el del juego pero vacío. Si pinchas en una casilla sitúas la rana, y las siguientes que pinches serán las piedras. Cuando hayas terminado de poner piedras pulsas Solución. Si hay más de una solución te seguirán saliendo cada vez que pulses el botón hasta que ya no queden más:

captura

Pincha aqui para bajar el ejecutable y el código

Puedes usar los casos que salen en el juego, como en las tres capturas de arriba, o probar otros.

Si vas a probar los tuyos propios muchas veces pasará que no haya ninguna solución, o que haya tantas que se te quede el programa prácticamente colgado pensando. Poniendo 5 o 6 piedras normalmente saca las soluciones rápido.

Realmente son dos programas separados:

  • Un programa en Lisp que es el que calcula las soluciones (rana.lsp). Recibe por la entrada estándar las posiciones de las piedras y de la rana: cada par de números son la coordenada X y la Y de una piedra, empezando de 0,0 que es la esquina superior izquierda. Luego una linea que ponga FIN, y luego las coordenadas de la rana.

    Al ejecutarlo imprime las soluciones con un dibujo en ascii, donde < > ^ v significa izquierda, derecha, arriba, abajo.

    Se puede ver todo esto en los ficheros entrada.txt, salida.txt y ejecutar.bat

  • Un frontend para el programa anterior, hecho en C + API de Windows
    Puedes usar ranita.exe para ejecutarlo o puedes abrir los ficheros de Visual Studio para editarlo. en ambos casos hace falta el clisp, que he incluido en una carpeta en el ZIP.

    Genera el fichero entrada.txt a partir de lo que dibuje el usuario, llama al programa Lisp para que calcule las soluciones, lee el fichero salida.txt y lo dibuja en la ventana.

  • 16 octubre 2009

    MySQL Error 1083 SQLSTATE: 42000 (ER_WRONG_FIELD_TERMINATORS)

    Filed under: Uncategorized — Etiquetas: , — thisisoneball @ 02:52

    Si estás usando la instrucción LOAD DATA INFILE en MySQL y te da este error sin motivo, reinicia el demonio de MySQL.
    (Puedes comprobar si realmente se ha quedado pillado con:
    LOAD DATA INFILE ‘nada.txt’ INTO TABLE nada;
    Esto debería dar un error de que la tabla no existe, en lugar del error anterior)

    Como norma general, si MySQL te está haciendo algo raro, reinícialo, casi siempre es culpa suya y no de tu código.

    If you’re using LOAD DATA INFILE in MySQL and you get this error and you think you shouldn’t, restart the MySQL daemon and it will work again.

    As a rule of thumb, if MySQL is behaving weird, just restart the daemon. Most of the times it’s its fault and not yours.

    Blog de WordPress.com.