You are on page 1of 10

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

No. documento: 6.1 (V1.2) Nombre: Procedimientos almacenados (stored procedures) Objetivo: Conocer la declaracin, almacenado desde SQL Developer. Desarrollo: Para poder ejecutar el cdigo de un procedimiento almacenado, se tienen que realizar 3 pasos previamente: 1)Creacin/Compilacin. 2)Modificacin. 3)Llamado. 1) Creacin/Compilacin de un procedimiento almacenado Hay dos formas que se puede crear un procedimiento almacenado: a) Desde el SQL worsheet: 1)Primero se escribe el procedimiento almacenado. 2)Se corre el script con el segundo icono de la barra, o bien con F5, y el procedimiento ser creado y compilado, como se ve en la siguiente ilustracin: modificacin y llamado de un procedimiento

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

Para comprobar que si se creo, ir al Object Browser y buscar bajo Procedures, como se muestra a continuacin:

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

b) Desde el Object Browser: 1)Se oprime el botn contextual del ratn sobre procedures, y se desplegara un men, de ah seleccionar la opcin New Procedure. como se muestra a continuacin:

2)En la siguiente pantalla hay que especificar el nombre del procedimiento, en este caso PEJEMPLO_2 y dar clic en el botn de Aceptar:

3)Una tercera pantalla ser abierta, una nueva herramienta dentro SQL Developer, el editor PLSQL, como se puede ver en la siguiente ilustracin:

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

4)Finalmente damos clic en el cono de compilacin y un mensaje aparecer en indicando con el procedimiento almacenado fue compilado.

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

2) Modificacin de un procedimiento almacenado Hay dos formas que se puede crear un procedimiento almacenado: a)A travs de SQL Worksheet, de la misma forma que realizo el paso anterior. b)A travs del object browser, ir a procedures, ir al procedimiento que queremos modificar en este caso P_EJEMPLO2, con el botn contextual de ratn elegimos del men la opcin Edit:

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

c)Y aparecer nuevamente el editor PLSQL.

Ah se pueden hacer la modificaciones necesarias y compilar nuevamente, para guardar los cambios en la base de datos.

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

3)Llamado/Ejecucin de un procedimiento almacenado: La forma en que ejecutaremos nuestro procedimiento almacenado es a travs de un bloque de PLSQL, como se muestra a continuacin: BEGIN pmsj.depurarmsj; p_ejemplo1; END; / SELECT * FROM vmsj; Ejercicio 6.1.1.- Crea un procedimiento almacenado de nombre prc_611, que genere un mensaje 'Hola Mundo', a travs de la rutina pmsj.insmsj. Despus llmalo desde un bloque PLSQL annimo. Nota1: Para realizar esto, tienes que hacer los siguientes pasos: 1)Crear el procedimiento almacenado. 2)Hacer las modificaciones pertinentes en el editor PLSQL. 3)Invocarlo.

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

Tipos de parmetros y llamado Un procedimiento almacenado puede tener 3 tipos de parmetros: A) IN (por default), parmetro de entrada B) OUT, parmetro de salida C) IN OUT, parmetro de entrada/salida. a) Parmetros de entrada, pueden ser referenciados dentro del PA, envan valores del bloque PLSQL al procedimiento almacenado. Ejemplo 3 (PA con 3 parmetros de entrada): CREATE OR REPLACE PROCEDURE P_EJEMPLO3 ( Pmensaje IN VARCHAR2, Pnumero IN NUMBER, Pfecha IN DATE ) AS V2mensaje VARCHAR2(60) := NULL; Nnumero NUMBER; Dfecha DATE; BEGIN V2mensaje := substr(Pmensaje,1,60); pmsj.insmsj('Los primeros 60 caracteres del parametro Pmensaje son : "' || V2mensaje || '"'); Nnumero := Pnumero + 10; pmsj.insmsj('El valor del parametro Pnumero (mas 10) es : ' || to_char(Nnumero)); Dfecha := Pfecha - 10; pmsj.insmsj('El valor del parametro Pfecha (10 dias antes) es : ' || to_char(Dfecha, 'ddmonth-yyyy hh24:mi')); END P_EJEMPLO3; Tipos de llenado de parmetros Existen dos formas en que pueden ser llenados los parmetros de un PA. a)Posicional b)Nombrado (Referencial) El llenado posicional ser determinado por la posicin de los parmetros y de los valores que estos van a recibir. Ejemplo: BEGIN pmsj.depurarmsj; p_ejemplo3('Este es el valor que va a tener el parametro', 50, sysdate); END; /

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

SELECT * FROM vmsj;

En el caso del llenado nombrado, la posicin no tiene relevancia ya que se indica explcitamente que valor parmetro actual ser enviado a que parmetro formal. Ejemplo: BEGIN pmsj.depurarmsj; p_ejemplo3(Pfecha=>sysdate, Pmensaje => 'Este es el valor que va a tener el parametro', Pnumero => 50); END; / SELECT * FROM vmsj; Nota: Parmetros formales: Pfecha, Pmensaje y Pnumero Parmetros Actuales: sysdate, 'Este es el valor que va a tener el parametro' y 50 Ejercicio 6.1.2.- Crea un procedimiento almacenado de nombre prc_612, que reciba un parmetro de entrada de tipo alfanumrico y otro de tipo booleano. Si el parmetro booleano es FALSE, entonces imprimir el mensaje 'Primer Parmetro Ignorado', en caso contrario, con el valor del parmetro alfanumrico genera un mensaje, a travs de la rutina pmsj.insmsj. Genera dos bloques PLSQL annimos. a)Ejecuta el PA, con llenado posicional de parmetros. b)Ejecuta el PA, con llenado referencial de parmetros.

Instituto Tecnolgico de Quertaro Asignatura: Taller de Base Datos Docente: Alejandro Hernndez Villalobos

b) Parmetros de salida, pueden ser referenciados dentro del PA, y adicionalmente se le pueden asignar valores, enva valores del procedimiento almacenado al bloque PLSQL, por lo que se necesitara una variable para recibir el valor que enviado. Ejemplo 4 (PA con un parmetro de entrada y otro de salida): CREATE OR REPLACE PROCEDURE P_EJEMPLO4(PINnumero NUMBER) AS Nnumero NUMBER; BEGIN Nnumero := PINnumero; POUTnumero := POWER(Nnumero, 2) ; END P_EJEMPLO4; Llamado del PA: DECLARE Npotencia NUMBER; BEGIN pmsj.depurarmsj; p_ejemplo4(PINnumero => 5, POUTnumero => Npotencia); pmsj.insmsj('Valor de parmetro de entrada' || 5); pmsj.insmsj('Valor de parmetro de salida' || Npotencia); END; / SELECT * FROM vmsj; Nota: Parmetros formales: PINnumero, POUTnumero. Parmetros actuales: 5, Npotencia. Ejercicio 6.1.3.- Crea un procedimiento almacenado de nombre prc_613, que reciba como parmetro de entrada el no. de un empleado (empno) y regrese en un parmetro de salida alfanumrico el nombre del empleado (ename), todo esto de la tabla EMP. a)Ejecuta el PA, con llenado posicional de parmetros. b)Ejecuta el PA, con llenado referencial de parmetros. Debe validar que el nmero de empleado introducido pueda no existir. NOTA: Si la clave del empleado no existe, regresa un mensaje de error que diga 'Cve de empleado no existe' IN NUMBER, POUTnumero OUT

You might also like