sábado, 21 de noviembre de 2015

Procedimientos almacenados (Parte 1)

El procedimiento almacenado es un código que se almacena y ejecuta directamente en la base de datos, por lo que accede directamente a la información y por tanto resuelve más rápidamente la petición.
Los ejercicios del laboratorio 13 deben realizarse en Oracle y en MySQL y aunque ambos están basados en el estándar de lenguaje SQL cada uno tiene sus particularidades (Especialmente Oracle con PL/SQL).
Un procedimiento almacenado sencillo es el que se realiza para agilizar la inserción de datos

En MySQL: Creamos primero la base de datos ejemplo1 y le añadimos una tabla con dos columnas (nombre y edad).

Como pueden ver metí la pata e intenté crear la tabla sin haber especificado que database iba a usar :)

Una vez creada la tabla donde vamos a insertar datos mediante un procedimiento almacenado podemos crear el procedimiento.
Vamos a darle argumentos, los cuales deben ser del mismo tipo que los valores de la tabla y además serán argumentos de entrada.
Primero colocamos un delimitador, que puede ser el símbolo que nos de la gana aunque suele usarse // o $$. SI no ponemos eso al dar enter se va a ejecutar donde vea un ";" aunque no hayamos terminado con nuestro procedure.
Create procedure insertar_ejemplo le dice a MySQL que quiero crear un PA con ese nombre. Luego pongo los argumentos que pueden tener el nombre que quieras pero respetar los tipos de las columnas que quieres insertar.
Begin marca dónde comienzan las instrucciones. Dentro de begin y antes del end colocamos el código que debe ejecutarse.
Normalmente para insertar datos hacemos un insert into mi_tabla(columna_1, columna_2...) y en values ponemos entre paréntesis los datos que queremos insertar. En este caso en values pondremos los parámetros. Quedaría así:


Ese sería nuestro procedure ya listo para uso mediante el comando call. Lo llamamos y le damos argumentos:


Y como pueden ver al hacer un select, el procedimiento ha almacenado la información.

Ahora toca hacer lo mismo con Oracle. Ya les digo que si lo hacen en la interfaz web de Oracle y si lo hacen en la terminal, el proceso es igual. Pero el llamado del procedimiento sí que es distinto.

En Oracle la terminal no me parece tan amistosa como la de MySQL, por lo que me voy a la interfaz web Get Started.

Creamos un nuevo workspace que en este caso llamé nuevamente ejemplo 1 y en el creamos nuevamente nuestra tabla ejemplo con sus columnas nombre y edad. Para el caso no hace falta crearle clave primaria y desde luego no lleva foráneas ya que no hay más tablas, pero deben crearle la clave primaria porque nos servirá en el próximo ejercicio. La clave primaria sera nombre.


Una vez que hayas creado tu tabla (No expliqué eso en detalle porque supongo que esa parte sabes hacerla si estás aquí, pero cualquier cosa pregunta), vamos nuevamente a la opción create y esta vez no escogemos table sino procedure. Le daré el mismo nombre al procedimiento y a los argumentos que en el ejemplo con MySQL. Si quieres hacerlo en MySQL en una interfaz amigable como la de la aplicación de Oracle puedes usar MySQL workbench y verás que es muy parecido.




Ahora escribimos nuestro procedimiento. Oracle creará automáticamente el delimitador, el begin, el end y todo lo demás así que sólo dale el insert con los argumentos.

Tú sólo le das las sentencias que van entre el begin  el end.


El crea el procedimiento con la sintaxis correcta.

El llamado desde la interfaz web de oracle se hace así:


Si haces el llamado desde la terminal se usa el comando execute:


Ahí están los dos datos. El que metí por la intefaz web y el que hice por terminal.

No olvides salir tecleando exit en la terminal para que se guarden los datos. Si cierras la terminal sin hacerlo no se guardará la inserción de datos o lo que hayas hecho (Yo aprendí a las malas jejeje).
Espero que le sirva a alguien y más adelante publicaré otro tutorial sobre procedures, funciones, triggers, etc.