Reporte Catedrático: Procedimientos Almacenados Ing. María Elena Reyes Castellanos Alumnos: Miguel Angel Garduño Cordova Isaac Méndez Hernández Índice General Índice de tablas 2 Introducción 4 Objetivo 4 Desarrollo 5 Conclusiones 7 Observaciones 7 Glosario 8 Referencias 9 1 Índice de Imágenes Imagen 1. Creación del procedimiento. 5 Imagen 2. Verificación antes de ejecutar el procedimiento. 5 Imagen 3. Verificación después de ejecutar el procedimiento. 5 Imagen 4. Procedimiento para mostrar una consulta. 6 Imagen 5. Procedimiento fallido. 6 Imagen 6. Declaración de variables. 6 Imagen 7. Ejecución Exitosa 7 Imagen 8. Muestreo de resultados. 7 2 INTRODUCCION La presente practica representara el uso de procedimientos almacenados, es la segunda parte después de la práctica de disparadores. Al igual que con la práctica anteriormente dicha se usaran tablas por defecto ya creadas e igualmente se recomienda leer los archivos del fundamento teórico, así como las fuentes de información que se encuentran en la sección de referencias de la practica en curso. OBJETIVO Que el aprendiente pueda ser capaz de crear procedimientos y usarlos para futuras transacciones en lugar de escribir todo el código nuevamente. 3 DESARROLLO Un procedimiento almacenado no es más que una acción específica sobre una o más tablas, la cual puede ejecutarse solo llamando al procedimiento en lugar de escribir todo el código. Normalmente se usa para reducir tiempos y para los usuarios que son ajenos al código. La sintaxis de un procedimiento almacenado no varía demasiado de la de un disparador a excepción que no tiene condiciones de activación y es porque se activan manualmente a petición del usuario. Su sintaxis es: 1. CREATE [OR REPLACE] PROCEDURE 2. 3. 4. 5. 6. 7. 8. <NOMBRE_PROCEDIMIENTO>[(<PARAMETRO1>[IN|OUT|IN|OUT] <TIPO>,<PARAMETRO2>…)] IS –DECLARA VARIABLES LOCALES BEGIN <SENTENCIAS A EJECUTAR> [EXCEPCION] <SENTENCIAS A EXCLUIR> END <NOMBRE_PROCEDIMIENTO>; / Al igual que con los triggers el créate or replace es para crear o alterar un procedimiento sin tener que borrarlo. En los parámetros es similar a la creación de una clase en algún lenguaje de programación ya que toma esos datos para la ejecución de las sentencias a ejecutar. Es necesario especificar el tipo de dato de cada parámetro pero no su longitud. En la especificación de los parámetros se puede elegir si son de entrada (IN), de salida (OUT), o de entrada-salida (IN OUT). En caso de no especificar, el valor por defecto es IN. Como ya se mencionó antes, la sintaxis no se diferencia mucho de los disparadores y las sentencias se colocan de la misma forma junto con las excepciones. Se termina de la misma forma, con end y el nombre del procedimiento, y, en la línea de código, con una barra para indicar la terminación la creación o reemplazo del procedimiento. Como primer ejemplo existe una tabla llamada libros3 con los datos: autos, titulo, editorial y precio. El procedimiento a crearse tiene que aumentar los precios en un 10%, entonces: 4 Imagen 1. Creación del procedimiento. Y su respectiva comprobación. Imagen 2. Verificación antes de ejecutar el procedimiento. Imagen 3. Verificación después de ejecutar el procedimiento. Para ejecutar un procedimiento se usa execute seguido del nombre del procedimiento y punto y coma, lo anterior lo ejecuta pero aún se debe hacer una consulta para comprobar. El precio aumento como se tenía planeado. Ahora bien otra tabla llamada alumnos contiene los datos básicos de los alumnos de una 5 escuela tales como su número de control, nombre, apellido y calificaciones. El procedimiento creado debe mostrar un alumno en específico y su promedio. La sintaxis es un poco más complicada pero usa las mismas reglas. El procedimiento varía en que ahora será necesario el uso de parámetros. Imagen 4. Procedimiento para mostrar una consulta. El primer parámetro es un valor de entrada (IN) que se especificara al momento de ejecutar el procedimiento, indica en que registro buscar ya que identifica al número de control. El segundo parámetro es un valor de salida (OUT) el cual solicita una variable donde se colocaran los datos obtenidos. El resultado de la consulta se obtiene de forma un poco diferente a como se efectúa alguna otra transacción dado que para obtener el resultado es necesario introducirlo en la variable declarada c1 con “open c1 for” y después la consulta y todo esto dentro del begin. Como con el insert, delete y update que utilizan datos en IN no requieren alguna variable para ejecutarse pero no es el caso para un select ya que como devuelve información necesita de un OUT. Para ejecutar el procedimiento se utiliza execute y el nombre del procedimiento seguido de los parámetros si es que posee alguno el procedimiento, para el caso actual es necesario escribirlos. Imagen 5. Procedimiento fallido. Sin embargo la primera vez aparecerá un error y esto se debe a que no se ha declarado una variable que se usa en el procedimiento. Para declararla se usa: Imagen 6. Declaración de variables. Las variables de este tipo son necesario declararlas antes de los procedimientos pero una vez declaradas no es necesario hacerlo nuevamente, al menos, hasta el reinicio de la aplicación o servidor. Con la variable ya iniciada se procede a la ejecución del procedimiento. 6 Imagen 7. Ejecución Exitosa El procedimiento se ejecuta y marca que fue ejecutado correctamente pero no muestra nada más, lo anterior se debe a que se ejecutó pero se almaceno en la variable declarada como OUT, como un resultado. Para ver el resultado es necesario solicitar que se imprima la variable donde se encuentra tal resultado. Imagen 8. Muestreo de resultados. De esta forma se muestra el resultado sin tener que escribir todo el select nuevamente, tan solo ejecutando el procedimiento y sus respectivos parámetros. 7 CONCLUSIONES En conclusión, un procedimiento almacenado es un conjunto de instrucciones ya pre hechas para la ejecución de transacciones de forma más rápida. Basta con colocar los parámetros deseados para que se ejecute la instrucción deseada sin necesidad de todo el código. OBSERVACIONES Una observación que cabe señalar es su diferencia con los triggers ya que al no necesitar una condición, es necesario llamarlos cada vez que se necesiten. Además un procedimiento ejecutara lo que se le tenga como instrucciones pero no necesariamente mostrara resultados aun así se haya ejecutado correctamente, para lograr esto último es necesario el uso de variables. 8 GLOSARIO Procedure: Se traduce como procedimiento. Es un algoritmo ya hecho que solo ejecutara lo que tenga como instrucciones. Execute: Literalmente Ejecutar In: Especificación de la variable, indica entrada de datos. Out: Especificación de la variable, indica salida de datos. Cursor: Es una estructura de control utilizada para el recorrido de los registros del resultado de una consulta. 9 REFERENCIAS http://www.oracleya.com.ar/simulador/simulador.php?cod=250&punto52 http://es.wikipedia.org/wiki/Cursor_(base_de_datos) 10