Escuela Técnica Superior

Escuela Técnica Superior de Ingeniería Informática
de Ingeniería Informática Departamento de Lenguajes
Departamento de Lenguajes y Sistemas Informáticos
y Sistemas Informáticos

1. Procedimientos y
funciones
1.1 Definición
1.2 Llamadas
Funciones, procedimientos,
1.3 Documenta-
ción
1.4 Depuración
2. Secuencias
secuencias y cursores en
2.1 Definición
3. Cursores
3.1 Bucle FOR
Oracle
3.2 Atributos
4. Ejercicios
5. Scripts

Grupo de Ingeniería del Software y Bases de Datos
Departamento de Lenguajes y Sistemas Informáticos
Universidad de Sevilla

© Diseño de Amador Durán Toro, 2011
diciembre 2011

Funciones, procedimientos, secuencias y cursores en Oracle

Escuela Técnica Superior • Objetivos de este tema
de Ingeniería Informática
Departamento de Lenguajes
y Sistemas Informáticos – Conocer la definición y utilización de funciones y
1. Procedimientos y
funciones procedimientos en Oracle.
1.1 Definición
1.2 Llamadas – Conocer la definición y utilización de las secuencias en
1.3 Documenta-
ción
1.4 Depuración
Oracle.
2. Secuencias
2.1 Definición – Conocer la definición y utilización de cursores en Oracle.
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
© Diseño de Amador Durán Toro, 2011

diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 1

Ejercicios Bloque de excepciones PL/SQL. 1. Ejercicios invocados desde distintos entornos: SQL*PLUS. © Diseño de Amador Durán Toro.1 Definición procedurales son unidades de programa PL/SQL: 1. Scripts END.1 Definición • Los procedimientos o funciones son bloques PL/SQL con 3. desde otros procedimientos y funciones y desde otras herramientas Oracle y aplicaciones. ción 1.nombre-procedimiento 1. .2 Atributos 4. que pueden recibir parámetros y pueden ser 3.3 Documenta- ción Declaración de cursores. 5.2 Llamadas Declaración de constantes. diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 2 Procedimientos y funciones Escuela Técnica Superior • Sintaxis Procedimientos de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos CREATE [OR REPLACE} PROCEDURE [esquema].2 Atributos 4. Secuencias BEGIN 2. 5. 3.1 Bucle FOR nombre. y su mayor diferencia radica en que las © Diseño de Amador Durán Toro. 1. Procedimientos y que se almacenan en la base de datos.1 Definición Declaración de variables.) {IS | AS} funciones 1. 2011 funciones devuelven un valor. Scripts Oracle*Forms. Estos objetos funciones 1.4 Depuración 2. Secuencias 2.2 Llamadas 1. Procedimientos y funciones • Oracle permite acceder y manipular información de la base Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes de datos definiendo objetos procedurales (subprogramas) y Sistemas Informáticos 1. Cursores 3..3 Documenta- Funciones y Procedimientos almacenados.1 Bucle FOR EXCEPTION 3. 2011 octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 3 .1 Definición Cuerpo del subprograma PL/SQL. 1. Cursores 3. • Los procedimientos y funciones llevan a cabo tareas específicas. Procedimientos y (nombre-parámetro {IN | OUT | IN OUT} tipo de dato.4 Depuración 2.

1 Bucle FOR • OUT: especifica que se trata de un parámetro de salida. 2.2 Atributos 4. . Procedimientos y funciones Escuela Técnica Superior • Sintaxis Funciones de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos CREATE [OR REPLACE] FUNCTION [esquema]. • IN OUT: Son parámetros de entrada y salida a la vez. Scripts Bloque de excepciones PL/SQL.2 Atributos parámetros cuyo valor es devuelto después de la ejecución el 4. © Diseño de Amador Durán Toro. 2.2 Llamadas Declaración de variables. Cursores 3. etc). 1.1 Definición 1. Scripts procedimiento al bloque PL/SQL que lo llamó. Las funciones PLSQL no admiten parámetros de salida. Ejercicios EXCEPTION 5. Cursores 3. © Diseño de Amador Durán Toro.. Ejercicios 5. VARCHAR2. 1. 1.4 Depuración 2.3 Documenta- ción dicho parámetro tiene que tener un valor en el momento de 1. Podemos utilizar múltiples parámetros. Secuencias 2.1 Definición BEGIN 3. Si no se especifica nada.1 Bucle FOR Cuerpo del subprograma PL/SQL. Secuencias Declaración de cursores.4 Depuración llamar a la función o procedimiento. Procedimientos y (nombre-parámetro {IN | OUT | IN OUT} tipo-de-dato. En caso de 1. 2011 octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 5 . • Tipo-de-dato: Indica el tipo de dato PLSQL que corresponde al parámetro (NUMBER. 3.1 Definición los parámetros son por defecto de tipo entrada.1 Definición RETURN tipo-de-dato {IS | AS} 1. Son 3. END.3 Documenta- ción Declaración de constantes.. podemos omitir los paréntesis.nombre-función 1. 3.) funciones 1.2 Llamadas • IN: especifica que el parámetro es de entrada y que por tanto 1. 2011 octubre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 4 Procedimientos y Funciones Descripción de la sintaxis: Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes • Nombre-parámetro: es el nombre que queramos dar al y Sistemas Informáticos parámetro. Procedimientos y funciones no necesitarlos.

salario_emp%TYPE. 5. END obtener_salario. Cursores SELECT salario_emp INTO w_salario 3. w_fecha_alta IN emp. 4. w_depart varchar. Procedimientos y funciones (w_código_emp IN emp.código_emp%TYPE) 1. • Cada función debe devolver un valor del tipo especificado utilizando la sentencia RETURN. En este procedimiento se ha definido el tipo de dato de los parámetros de entrada como del mismo tipo que los campos de la tabla “emp” . 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 7 . es decir: nombreParametro IN nombreTabla. Secuencias BEGIN 2.1 Bucle FOR FROM emp 3.nombreColumna%TYPE. Scripts END contratar_empleado.2 Llamadas 1. Sería equivalente a poner: © Diseño de Amador Durán Toro.codigo_emp%TYPE.cod_depart%TYPE.1 Definición BEGIN 3. © Diseño de Amador Durán Toro.fecha_alta%TYPE) ción 1. Secuencias 2. 2011 w_codigo_emp number. fecha_alta. w_fecha_alta.2 Llamadas RETURN NUMBER 1.2 Atributos 4. cod_depart) 3. Ejercicios WHERE código _emp = w_código_emp. Procedimientos y funciones Escuela Técnica Superior • Ejemplo de creación de un procedimiento de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos CREATE OR REPLACE PROCEDURE contratar_empleado 1. 1. Cursores 3. 1.3 Documenta- ción IS w_salario emp.1 Definición w_depart IN emp.2 Atributos VALUES (w_código_emp.1 Definición 1. funciones 1. w_depart).3 Documenta. diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 6 Procedimientos y funciones Escuela Técnica Superior • Ejemplo de creación de una función de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos CREATE OR REPLACE FUNCTION obtener_salario 1.4 Depuración IS 2. Scripts RETURN w_salario. Ejercicios 5..1 Bucle FOR INSERT INTO emp(código_emp. Procedimientos y (w_codigo_emp IN emp.4 Depuración 2.1 Definición 3.

.2 Atributos 4. IS .’19/12/1999’). © Diseño de Amador Durán Toro. SQL*ReportWriter.3 Documenta- /* llamada al procedimiento contratar_empleado */ ción contratar_empleado (2645. ’Contabilidad’.2 Llamadas 1. ’Contabilidad’.4 Depuración 2. 2011 catálogo. función y triggers 1. Ejercicios 5. Procedimientos y funciones Escuela Técnica Superior • Cuando se crea un procedimiento o función.2 Llamadas 1. funciones 1. en la SGA diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 8 Procedimientos y funciones Escuela Técnica Superior • Llamadas a procedimientos de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos • Desde otro procedimiento. Si en un momento determinado se libera el área SQL de un procedimiento o función. los 3. Oracle aplica el algoritmo ‘menos-usado-recientemente’.1 Bucle FOR 3. Scripts • Herramientas de desarrollo de aplicaciones de Oracle: SQL*Plus. Secuencias 2. por tanto. código objeto en catálogos del diccionario de datos. Secuencias 2. que está almacenado en © Diseño de Amador Durán Toro. Procedimientos y CREATE PROCEDURE proceso .1 Definición BEGIN . 3. ción 1.1 Definición Global Area) y almacena tanto el código fuente como el 1.1 Definición 3. Scripts y lo pueden compartir muchos usuarios. Ejercicios 5. SQL*Menu. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 9 .2 Atributos procedimientos o funciones se ejecutan más rápidamente 4. guarda el 1...3 Documenta. SQL*Forms..1 Definición 3. 1. Cursores END. Oracle de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos automáticamente compila el código fuente. Cuando es necesario liberar áreas de la SGA. 1. la próxima vez que se ejecute se vuelve a cargar el código objeto.1 Bucle FOR 3.. Procedimientos y código objeto en un área compartida de la SGA (System funciones 1.. Cursores • El código objeto permanece en la SGA. etc.’19/12/1999’).4 Depuración 2. EXECUTE contratar_empleado (2645. SQL*Dba.

END. 2. Ejercicios 5. Secuencias END. Secuencias 2.2 Atributos • Para obtener el texto de un procedimiento o función almacenado se 4. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 11 .. Procedimientos y funciones Escuela Técnica Superior • Llamadas a funciones de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos • Desde otro procedimiento..2 Llamadas 1. IS . Ejercicios 5.1 Definición 3. 1. ‘FUNCTION’).. nom_emp.PUT_LINE(‘Salario cod_emp 1 '||obtener_salario(1)). diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 10 Procedimientos y funciones Escuela Técnica Superior • Documentación procedimientos y funciones de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos • Para obtener los nombres de todos los procedimientos y funciones 1. Scripts puede consultar la VISTA USER_SOURCE SELECT text FROM USER_SOURCE WHERE type = ‘PROCEDURE’ AND name = ‘CONTRATAR_EMPLEADO’ © Diseño de Amador Durán Toro.2 Atributos • Desde un bloque anónimo 4. Cursores 3. función y triggers 1. Cursores 3.1 Definición 1. funciones 1. 2011 FROM emp. object_type FROM USER_OBJECTS 1. • Desde una instrucción SQL SELECT cod_emp.2 Llamadas SELECT object_name. obtener_salario(cod_emp) © Diseño de Amador Durán Toro.3 Documenta- /* llamada a la función obtener_salario */ ción w_sal :=obtener_salario (w_código).3 Documenta- ción WHERE object_type IN (‘PROCEDURE’ .1 Bucle FOR 3. 1.. 1. Procedimientos y funciones se puede consultar la VISTA USER_OBJECTS 1. Procedimientos y CREATE PROCEDURE proceso .. Scripts BEGIN DBMS_OUTPUT.1 Bucle FOR 3..1 Definición BEGIN .1 Definición 3.4 Depuración 2.4 Depuración 2.

Scripts DBMS_OUTPUT. Secuencias función.NEW_LINE Marca un final de línea DBMS_OUTPUT.4 Depuración • Los usos más frecuentes de las secuencias.3 Documenta- ción 1. Ejercicios 5.1 Bucle FOR Procedimiento Descripción 3. 4. Cursores – La generación automática de claves primarias 3. una misma secuencia se puede usar para generar valores de columnas numéricas de una o más tablas. Procedimientos y funciones VISTA USER_ERRORS o el comando SHOW ERRORS. Procedimientos y funciones Escuela Técnica Superior • Depuración de procedimientos y funciones de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos • Para visualizar los errores de compilación se puede consultar la 1.3 Documenta- ción • Se pueden visualizar valores o mensajes desde un procedimiento o 1. Scripts • Las secuencias son independientes de las tablas. Cursores 3.PUT_LINE Combina PUT y NEW_LINE Es necesario activar SERVEROUTPUT (SET SERVEROUTPUT ON) para ver las salidas desde procedimientos o funciones almacenados © Diseño de Amador Durán Toro. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 12 Secuencias Escuela Técnica Superior • Las secuencias (sequences) son objetos que de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos facilitan la generación automática de series 1. Secuencias 2.2 Atributos DBMS_OUTPUT.2 Llamadas 1.2 Atributos – Coordinar las claves de múltiples filas o tablas. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 13 . son: 2.2 Llamadas 1.1 Definición 3. 1.4 Depuración 2.PUT Añade texto a la línea actual 4. © Diseño de Amador Durán Toro. por tanto. invocando al package standard DBMS_OUPUT.1 Bucle FOR 3.1 Definición numéricas. 1. Ejercicios 5. Procedimientos y funciones 1.1 Definición 1.1 Definición 3. 2.

2 Llamadas 1.) diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 15 . Secuencias 2. 2011 Lista “Select” del comando Select Clausula “Set” del comando Update diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 14 Secuencias Escuela Técnica Superior • Ejemplo de creación de secuencia de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos CREATE SEQUENCE sec_emp. Procedimientos y funciones 1.1 Definición [MAXVALUE n] 1.Currval 3...1 Bucle FOR 3.3 Documenta- .) 5. – Insertar empleado en la tabla Salarios INSERT INTO Salario (cod_emp..1 Definición de las tabla Empleado y la tabla Salario. Procedimientos y funciones 1. Secuencias CREATE SEQUENCE nombre_secuencia Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes [INCREMENT BY n] y Sistemas Informáticos [START WITH n] 1. Cursores nombre_secuencia.2 Atributos 4.4 Depuración 2..codemp.1 Bucle FOR – Insertar fila en la tabla Empleado 3.2 Atributos 4.4 Depuración Empleado y coordinar los valores de las claves primarias 2. Ejercicios INSERT INTO Empleado (cod_emp..1 Definición • Para referenciar al número actual de una secuencia: 3.NEXTVAL..) © Diseño de Amador Durán Toro. ‘emp01’. Cursores 3. 1.2 Llamadas 1.. 2011 VALUES (sec_emp. Scripts VALUES (sec_emp. ción 1. Secuencias 2.Nextval • Los usos posibles de Nextval y Currval son: Clausula “Values” del comando Insert © Diseño de Amador Durán Toro.. Scripts • Para generar el siguiente número de una secuencia: nombre_secuencia.CURRVAL.).. 3.1 Definición 1. Ejercicios 5...3 Documenta- • Obtener los valores de la clave primaria de la tabla ción 1.mes.

1 Bucle FOR 3. número. Scripts BEGIN OPEN cursor_1. FETCH cursor_1 INTO w_nombre. © Diseño de Amador Durán Toro.. w_número. diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 16 Cursores Escuela Técnica Superior • Ejemplo uso de cursor de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos 1.1 Definición – Declare 3. diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 17 . 5.. 2. – Fetch • Lee los datos del cursor con la sentencia FETCH. CLOSE cursor_1. Ejercicios • Abre el cursor y lo inicializa para que devuelva las filas. Procedimientos y DECLARE funciones 1. Cursores • Los cursores permiten realizar operaciones sobre los Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes registros devueltos por una sentencia Select. 2011 – Close • Desactiva el cursor y libera los recursos.2 Llamadas 1. 5. FETCH . Cursores • Se declara el cursor asignándole nombre y asociándole a una consulta. 3. 2011 END.4 Depuración • Operaciones con cursores 2.3 Documenta- ción 1.3 Documenta- SELECT nombre. Secuencias 2. 3.2 Atributos 4.4 Depuración FROM emp ORDER BY salario.. Procedimientos y funciones – Se necesita tratamiento fila a fila 1.1 Definición 1.2 Llamadas – En sentencias SELECT que devuelven más de una fila 1. Secuencias 2.nombre%TYPE.número%TYPE.1 Definición w_nombre emp. © Diseño de Amador Durán Toro.1 Bucle FOR w_número emp. CLOSE cursor_1.. Scripts • Ejecuta la consulta asociada al cursor.. • Devuelve la siguiente fila en el conjunto activo.salario%TYPE. Ejercicios w_salar io emp.2 Atributos – Open 4.1 Definición CURSOR cursor_1 IS 1.. • Los datos devueltos se almacenan en variables de control o en un registro. 3. Cursores 3. w_salario. salario ción 1. INTO . La utilización y Sistemas Informáticos de cursores es necesaria cuando: 1. .

1 Definición FETCH de las filas sobre la variable registro. Por último 1. 5.2 Atributos 4.3 Documenta- FROM emp ORDER BY salario. 2011 El registro ha sido declarado basado en el cursor: w_registro <nombre_cursor>%ROWTYPE diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 18 Cursores Escuela Técnica Superior • Bucle de cursor FOR de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos – De forma implícita declara una variable REGISTRO de tipo 1. Procedimientos y CURSOR cursor_1 IS funciones 1. Scripts FETCH cursor_1 INTO w_registro.1 Definición SELECT nombre.1 Bucle FOR 3. 2011 END.2 Llamadas 1. 4.1 Definición CURSOR c1 IS 3.4 Depuración w_registro cursor_1%ROWTYPE.2 Atributos SELECT empno. © Diseño de Amador Durán Toro. Procedimientos y ROWTYPE.. CLOSE cursor_1.3 Documenta- cierra el cursor cuando todas las filas han sido procesadas ción 1. © Diseño de Amador Durán Toro.4 Depuración DECLARE 2. . Scripts BEGIN FOR c1rec IN c1 LOOP /* De forma implícita hace OPEN y FETCH del cursor*/ .. abre el cursor y de forma repetitiva realiza el funciones 1. salario 1.1 Definición 3. ción 1. Secuencias 2. Secuencias 2. Cursores Escuela Técnica Superior • Ejemplo uso de cursor de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos DECLARE 1. Cursores 3. ename FROM emp.2 Llamadas 1... Ejercicios 5. número. 2. END LOOP. diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 19 . Ejercicios OPEN cursor_1. Cursores 3. END.1 Bucle FOR BEGIN 3.

2 Llamadas 1. 3. Cursores 3. CLOSE cursor_1.1 Definición IF NOT (cursor_1%ISOPEN) THEN OPEN cursor_1. Ejercicios no devuelve ninguna fila.. Cursores 3.1 Bucle FOR • %NOTFOUND Devuelve true si el último FETCH evaluado 3. 1. Scripts • %ROWCOUNT Contador inicialmente a cero. 5. Ejercicios 5.2 Atributos 4.2 Atributos 4. Secuencias 2.3 Documenta- ción 1. Scripts LOOP FETCH cursor_1 INTO registro.1 Definición devuelve la siguiente fila. Cursores Escuela Técnica Superior • Atributos del cursor de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos – Cada cursor definido tiene cuatro atributos a los que se 1. EXIT WHEN cursor_1%NOTFOUND. salario FROM empleados.2 Llamadas 1.. que se incrementa en uno tras el FETCH de cada fila. Secuencias BEGIN 2. 3. © Diseño de Amador Durán Toro. END. .4 Depuración • %FOUND Devuelve true si el último FETCH evaluado 2.1 Definición 1. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 21 . END LOOP. Procedimientos y funciones CURSOR cursor_1 IS 1. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 20 Cursores Escuela Técnica Superior • Ejemplo uso de atributos del cursor de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos DECLARE 1. © Diseño de Amador Durán Toro.1 Definición SELECT nombre. 1. Procedimientos y funciones puede acceder para conocer el estado del cursor. 3. • %ISOPEN Devuelve true si el cursor especificado está abierto.3 Documenta- registro cursor_1%ROWTYPE ción 1.4 Depuración 2.1 Bucle FOR ENDIF.

1. Ejercicio 1 Escuela Técnica Superior • Añadir registros a la tabla de empleados.2) CHECK (comision>=0 AND comision <=1).1 Definición 1.2 Llamadas CREATE TABLE empleados 1. 1. Scripts © Diseño de Amador Durán Toro. Procedimientos y funciones 1. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 23 . 3. 3. 2. diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 22 Ejercicio 2 Escuela Técnica Superior • Crear un procedimiento para insertar un nuevo de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos empleado en la tabla Empleados. utilizando una de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos secuencia que genere el código de empleado.2 Llamadas atributos del empleado. Cursores salario number(9. Secuencias nom_emp char(10) not null. cod_jefe integer.1 Definición primaria del nuevo empleado.2 Atributos 4.4 Depuración – Utilizar una secuencia para obtener el valor de la clave 2. Procedimientos y funciones – Los argumentos del procedimiento son los valores de los 1. 1.3 Documenta- ción 1.1 Definición 1. PRIMARY KEY (cod_emp). Cursores 3. Ejercicios 5. 1. Scripts comision number(3. 2011 ON DELETE CASCADE). FOREIGN KEY (cod_jefe) REFERENCES empleados © Diseño de Amador Durán Toro.2 Atributos fecha_nac date DEFAULT SYSDATE. Ejercicios 5.4 Depuración 2.1 Bucle FOR 3.1 Bucle FOR 3.1 Definición 3. 4.2) DEFAULT 100000. Secuencias 2.3 Documenta- ción (cod_emp integer.

Procedimientos y funciones 1. ción 1.1 Definición 3. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 25 .2 Atributos 4. Ejercicios 5.2 Llamadas 1.1 Bucle FOR • Es posible también llamar a la función desde un 3.1 Definición cuenta que hay que añadir la comisión (que es un 1.1 Bucle FOR 3.4 Depuración 2.3 Documenta- ción 1. Procedimientos y subordinados funciones 1.3 Documenta- porcentaje adicional del salario) al salario. Cursores 3.4 Depuración 2. Secuencias 2. Tenga en 1.2 Llamadas 1.1 Definición 3. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 24 Ejercicio 4 Escuela Técnica Superior de Ingeniería Informática • Obtener los tres empleados con más Departamento de Lenguajes y Sistemas Informáticos 1.1 Definición 1. END que no es necesario nominar) y pruébelo con una instrucción DBMS_OUTPUT © Diseño de Amador Durán Toro. Ejercicio 3 Escuela Técnica Superior • Crear una función para calcular el sueldo total de de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos un empleado pasado como parámetro.2 Atributos 4. Ejercicios bloque PL/SQL: Genere un bloque PL/SQL 5.. Secuencias 2. Scripts anónimo (un procedimiento BEGIN …. Scripts © Diseño de Amador Durán Toro. Cursores 3.

obtener_salario(cod_emp) FROM empleados..2 Atributos END obtener_salario. cod_jefe integer. 2011 END contratar_empleado.2 Llamadas comision number(5. Procedimientos y funciones --SELECT * FROM empleados.nom_emp.4 Depuración 2.10.3 Documenta.comision%TYPE. / diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 26 Script ejercicios 1.salario%TYPE.2) DEFAULT 100000. de Ingeniería Informática EXECUTE contratar_empleado('Segundo'. Scripts /* Prueba de función desde una instrucción SQL */ SELECT cod_emp. END..2000. 1.nom_emp%TYPE. 2011 '||obtener_salario(1)).cod_jefe%TYPE) IS BEGIN INSERT INTO empleados (cod_emp. Ejercicios CREATE OR REPLACE PROCEDURE contratar_empleado 5.2300.15. Departamento de Lenguajes y Sistemas Informáticos EXECUTE contratar_empleado('Tercero'.salario%TYPE. 1. COMMIT WORK. 1. Procedimientos y funciones salario number(9.1). 2.1 Bucle FOR RETURN (w_salario_bruto).1 Definición fecha_nac date DEFAULT SYSDATE. w_salario. BEGIN DBMS_OUTPUT.null).1 Bucle FOR 3.salario. w_comision IN empleados. 1. Cursores CREATE SEQUENCE sec_emp INCREMENT BY 1 START WITH 1.2 y3 Escuela Técnica Superior DROP TABLE empleados.00. CHECK (comision>=0 AND comision<=1). 3.comision. Cursores WHERE cod_emp = w_cod_emp.1 Definición SELECT salario*(1+comision) INTO w_salario_bruto FROM empleados 3. 1.nom_emp. w_salario IN empleados. ción PRIMARY KEY (cod_emp).07. w_comision. Ejercicios / 5. 3. 3. de Ingeniería Informática Departamento de Lenguajes CREATE TABLE empleados y Sistemas Informáticos ( cod_emp integer.2). 1. /* Prueba de función desde un bloque */ SET serveroutput ON..1000.cod_jefe) VALUES (sec_emp.1 Definición DROP SEQUENCE sec_emp. 1.comision. / diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 27 . nom_emp char(10) not null.2 y3 Escuela Técnica Superior EXECUTE contratar_empleado('Primero'.1 Definición 1. empleados. Script ejercicios 1. w_cod_jefe IN empleados. Scripts (w_nom_emp IN empleados. 4.25. Secuencias 2. 3.3 Documenta.2 Llamadas CREATE OR REPLACE FUNCTION obtener_salario(w_cod_emp IN 1.2 Atributos /* Procedimiento */ 4. Secuencias BEGIN 2. salario.nextval.2). w_nom_emp. 1. w_cod_jefe).4 Depuración FOREIGN KEY (cod_jefe) REFERENCES empleados ON DELETE CASCADE).cod_emp%TYPE) ción RETURN NUMBER IS w_salario_bruto empleados. © Diseño de Amador Durán Toro.PUT_LINE('Probando el salario de COD_EMP 1 '||' >>>> © Diseño de Amador Durán Toro.

funciones FOREIGN KEY (cojefe) references empleados).'D4'). Scripts INSERT INTO empleados VALUES ('D6'. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 29 .'Obrero 3'.'D4').'D.'Vendedor 3'. END LOOP. DBMS_OUTPUT.'D. Ejercicios FOR fila IN c LOOP 5. 3. 1.2 Llamadas 1. 3.3 Documenta- -- ción -. y Sistemas Informáticos nomemp varchar2(15).1 Bucle FOR 3.'D1').'Vendedor 2'.4 Depuración CURSOR c IS 2.'D5'). Cursores INSERT INTO empleados VALUES ('D3'. INSERT INTO empleados VALUES ('D10'.1 Bucle FOR BEGIN 3.'D4').PUT_LINE(fila.'D3').'D3'). Secuencias INSERT INTO empleados VALUES ('D1'. Cursores 3. de Ingeniería Informática Departamento de Lenguajes CREATE TABLE empleados (dni char(4) PRIMARY KEY.2 Atributos DBMS_OUTPUT. INSERT INTO empleados VALUES ('D7'.Producción'. © Diseño de Amador Durán Toro.'D4').2 Llamadas SET SERVEROUTPUT ON 1.'Jefe Marketing'.'Director'. INSERT INTO empleados VALUES ('D13'.Comercial'. Ejercicios INSERT INTO empleados VALUES ('D5'. INSERT INTO empleados VALUES ('D12'. INSERT INTO empleados VALUES ('D9'.Inserta datos de ejemplo en la tabla 1.4 Depuración -- 2.1 Definición 1. INSERT INTO empleados VALUES ('D8'.'D2'). 3. INSERT INTO empleados VALUES ('D11'.'Obrero 2'. 5. END. Secuencias SELECT cojefe.'Vendedor 1'.'D1').1 Definición 1. / © Diseño de Amador Durán Toro.'Vendedor 4'.1 Definición INSERT INTO empleados VALUES ('D2'. 1. Script ejercicios 4 Escuela Técnica Superior DROP TABLE empleados.1 Definición GROUP BY cojefe ORDER BY 2 DESC.'D2'). 4. 4. Procedimientos y cojefe char(4).cuenta).'Jefe Ventas'.count(*) AS cuenta FROM empleados 2.null).'Obrero 1'. 2.3 Documenta- ción DECLARE 1.'Secretario'.2 Atributos INSERT INTO empleados VALUES ('D4'. Procedimientos y subordinados con bucle for funciones -- 1.PUT_LINE('Prueba cursor (3 superjefes) bucle FOR'). Scripts EXIT WHEN C%ROWCOUNT >3.'D3'). 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 28 Script ejercicios 4 Escuela Técnica Superior de Ingeniería Informática -- Departamento de Lenguajes y Sistemas Informáticos -.Procedimientos anónimos para obtener los tres empleados con más 1.cojefe||' '||fila.

CURSOR c IS SELECT cojefe.count(*) AS cuenta FROM empleados 1.cuenta).Para no crear ningún objeto en la BD ROLLBACK WORK. EXIT WHEN C%NOTFOUND. 2011 -. / © Diseño de Amador Durán Toro. DBMS_OUTPUT.3 Documenta- CURSOR c IS ción SELECT cojefe.2 Llamadas 1.1 Definición BEGIN 3.PUT_LINE('Prueba de cursor (3 superjefes) con 3. Secuencias fila c%ROWTYPE.4 Depuración GROUP BY cojefe ORDER BY 2 DESC.count(*) AS cuenta FROM empleados ción 1. END LOOP. Scripts WHILE c%ROWCOUNT<3 LOOP FETCH c INTO fila. END.2 Llamadas wcount INTEGER.Procedimientos anónimos para obtener los tres empleados con más subordinados de Ingeniería Informática con bucle normal Departamento de Lenguajes y Sistemas Informáticos -- 1. Procedimientos y DECLARE funciones wjefe CHAR(4).cojefe||' '||fila. Cursores DBMS_OUTPUT.Procedimientos anónimos para obtener los tres empleados con más subordinados de Ingeniería Informática Departamento de Lenguajes con bucle while y Sistemas Informáticos 1. END. diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 31 . 4. 1. Cursores DBMS_OUTPUT.PUT_LINE(fila. 2.1 Definición BEGIN 3. 4. 5.PUT_LINE(fila. Script ejercicios 4 -- Escuela Técnica Superior -. 2011 diciembre 2011 Introducción a la Ingeniería del Software y a los Sistemas de Información 30 Script ejercicios 4 -- Escuela Técnica Superior -. Secuencias fila c%ROWTYPE.cuenta). CLOSE c.1 Definición wcount INTEGER.1 Bucle FOR Open/Fetch/Close ** BUCLE NORMAL'). Ejercicios LOOP 5. 2. END LOOP.1 Definición wjefe CHAR(4). 2. Procedimientos y funciones DECLARE 1. 2.4 Depuración GROUP BY cojefe ORDER BY 2 DESC. CLOSE c. 1. / © Diseño de Amador Durán Toro.3 Documenta.2 Atributos Open/Fetch/Close ** BUCLE WHILE').1 Bucle FOR 3. 1.cojefe||' '||fila. EXIT WHEN C%NOTFOUND OR c%ROWCOUNT >3.PUT_LINE('Prueba de cursor (3 superjefes) con 3. 1. 3. Ejercicios OPEN c. DBMS_OUTPUT. Scripts FETCH c INTO fila.2 Atributos OPEN c.