Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
Funciones, procedimientos,
secuencias y cursores en
Oracle
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
Universidad de Sevilla
diciembre 2011
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
diciembre 2011
5. Scripts
Procedimientos y funciones
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
1.4 Depuracin
2. Secuencias
Procedimientos y funciones
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
octubre 2011
Sintaxis Procedimientos
CREATE [OR REPLACE} PROCEDURE [esquema].nombre-procedimiento
(nombre-parmetro {IN | OUT | IN OUT} tipo de dato, ..) {IS | AS}
Declaracin de variables;
Declaracin de constantes;
Declaracin de cursores;
BEGIN
Cuerpo del subprograma PL/SQL;
EXCEPTION
Bloque de excepciones PL/SQL;
END;
Procedimientos y funciones
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
octubre 2011
Sintaxis Funciones
CREATE [OR REPLACE] FUNCTION [esquema].nombre-funcin
(nombre-parmetro {IN | OUT | IN OUT} tipo-de-dato, ...)
RETURN tipo-de-dato {IS | AS}
Declaracin de variables;
Declaracin de constantes;
Declaracin de cursores;
BEGIN
Cuerpo del subprograma PL/SQL;
EXCEPTION
Bloque de excepciones PL/SQL;
END;
Procedimientos y Funciones
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
octubre 2011
Descripcin de la sintaxis:
Nombre-parmetro: es el nombre que queramos dar al
parmetro. Podemos utilizar mltiples parmetros. En caso de
no necesitarlos, podemos omitir los parntesis.
IN: especifica que el parmetro es de entrada y que por tanto
dicho parmetro tiene que tener un valor en el momento de
llamar a la funcin o procedimiento. Si no se especifica nada,
los parmetros son por defecto de tipo entrada.
OUT: especifica que se trata de un parmetro de salida. Son
parmetros cuyo valor es devuelto despus de la ejecucin el
procedimiento al bloque PL/SQL que lo llam. Las funciones
PLSQL no admiten parmetros de salida.
IN OUT: Son parmetros de entrada y salida a la vez.
Tipo-de-dato: Indica el tipo de dato PLSQL que corresponde al
parmetro (NUMBER, VARCHAR2, etc).
Procedimientos y funciones
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
(w_codigo_emp
IN
w_depart
emp.cod_depart%TYPE,
IN
emp.codigo_emp%TYPE,
1.2 Llamadas
w_fecha_alta
1.3 Documentacin
IN
emp.fecha_alta%TYPE)
IS
1.4 Depuracin
2. Secuencias
BEGIN
2.1 Definicin
3. Cursores
3.2 Atributos
4. Ejercicios
END contratar_empleado;
5. Scripts
number,
w_depart
varchar..
diciembre 2011
Procedimientos y funciones
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
(w_cdigo_emp IN emp.cdigo_emp%TYPE)
1.1 Definicin
1.2 Llamadas
RETURN NUMBER
1.3 Documentacin
IS
1.4 Depuracin
w_salario emp.salario_emp%TYPE;
BEGIN
2. Secuencias
2.1 Definicin
SELECT salario_emp
3. Cursores
FROM
INTO
w_salario
emp
3.2 Atributos
4. Ejercicios
= w_cdigo_emp;
5. Scripts
RETURN w_salario;
diciembre 2011
END obtener_salario;
Procedimientos y funciones
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
2. Secuencias
Procedimientos y funciones
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
Llamadas a procedimientos
1. Procedimientos y
funciones
BEGIN
1.1 Definicin
1.2 Llamadas
IS
...
...
/* llamada al procedimiento contratar_empleado */
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
END;
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
Procedimientos y funciones
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
Llamadas a funciones
1. Procedimientos y
funciones
BEGIN
1.1 Definicin
1.2 Llamadas
IS
...
...
/* llamada a la funcin obtener_salario */
1.3 Documentacin
1.4 Depuracin
END;
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
BEGIN
5. Scripts
END;
diciembre 2011
10
Procedimientos y funciones
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
11
Procedimientos y funciones
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
Procedimiento
Descripcin
DBMS_OUTPUT.PUT
DBMS_OUTPUT.NEW_LINE
DBMS_OUTPUT.PUT_LINE
4. Ejercicios
5. Scripts
diciembre 2011
12
Secuencias
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
13
Secuencias
CREATE SEQUENCE
[INCREMENT
[START
[MAXVALUE
...;
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
nombre_secuencia
BY
n]
WITH
n]
n]
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
5. Scripts
diciembre 2011
14
4. Ejercicios
Secuencias
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
VALUES (sec_emp.CURRVAL,..)
diciembre 2011
15
Cursores
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
Declare
Open
4. Ejercicios
5. Scripts
Fetch
Close
CLOSE cursor_1;
16
Cursores
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
17
Cursores
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
cursor_1%ROWTYPE;
2. Secuencias
2.1 Definicin
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
BEGIN
OPEN cursor_1;
FETCH cursor_1 INTO w_registro;
...
CLOSE cursor_1;
END;
El registro ha sido declarado basado en el cursor:
w_registro
<nombre_cursor>%ROWTYPE
diciembre 2011
18
3. Cursores
Cursores
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
DECLARE
2. Secuencias
CURSOR c1
2.1 Definicin
IS
3. Cursores
BEGIN
FOR c1rec
IN
c1
LOOP
...
END;
diciembre 2011
19
END LOOP;
Cursores
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
%FOUND
diciembre 2011
20
1.4 Depuracin
2. Secuencias
Cursores
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
IS
registro
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
BEGIN
IF NOT (cursor_1%ISOPEN) THEN OPEN cursor_1;
ENDIF;
3.2 Atributos
4. Ejercicios
5. Scripts
LOOP
FETCH cursor_1 INTO registro;
EXIT WHEN cursor_1%NOTFOUND;
END;
diciembre 2011
21
...
END LOOP;
CLOSE cursor_1;
Ejercicio 1
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
integer,
nom_emp
char(10)
not null,
salario
number(9,2)
DEFAULT 100000,
fecha_nac
date
DEFAULT SYSDATE,
comision
number(3,2)
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
integer,
22
Ejercicio 2
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
diciembre 2011
23
5. Scripts
Ejercicio 3
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
24
3. Cursores
Ejercicio 4
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
diciembre 2011
25
5. Scripts
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
/* Procedimiento */
CREATE OR REPLACE PROCEDURE contratar_empleado
(w_nom_emp IN empleados.nom_emp%TYPE,
w_salario IN empleados.salario%TYPE,
w_comision IN empleados.comision%TYPE,
w_cod_jefe IN empleados.cod_jefe%TYPE) IS
BEGIN
INSERT INTO empleados (cod_emp,nom_emp, salario,comision,cod_jefe)
VALUES
(sec_emp.nextval, w_nom_emp, w_salario, w_comision,
w_cod_jefe);
COMMIT WORK;
END contratar_empleado;
/
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin
26
1. Procedimientos y
funciones
EXECUTE contratar_empleado('Primero',1000.00,.07,null);
EXECUTE contratar_empleado('Segundo',2000,.10,1);
EXECUTE contratar_empleado('Tercero',2300.25,.15,2);
--SELECT * FROM empleados;
1.1 Definicin
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
27
1.2 Llamadas
Script ejercicios 4
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
28
Script ejercicios 4
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
SET SERVEROUTPUT ON
DECLARE
CURSOR c IS
SELECT cojefe,count(*) AS cuenta FROM empleados
GROUP BY cojefe ORDER BY 2 DESC;
3. Cursores
3.1 Bucle FOR
BEGIN
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
29
END;
/
Script ejercicios 4
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
--- Procedimientos annimos para obtener los tres empleados con ms subordinados
con bucle normal
-DECLARE
wjefe CHAR(4);
wcount INTEGER;
CURSOR c IS SELECT cojefe,count(*) AS cuenta FROM empleados
GROUP BY cojefe ORDER BY 2 DESC;
fila c%ROWTYPE;
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
BEGIN
DBMS_OUTPUT.PUT_LINE('Prueba de cursor (3 superjefes) con
Open/Fetch/Close ** BUCLE NORMAL');
OPEN c;
LOOP
FETCH c INTO fila;
EXIT WHEN C%NOTFOUND OR c%ROWCOUNT >3;
DBMS_OUTPUT.PUT_LINE(fila.cojefe||' '||fila.cuenta);
END LOOP;
CLOSE c;
3. Cursores
3.1 Bucle FOR
3.2 Atributos
4. Ejercicios
5. Scripts
diciembre 2011
30
END;
/
Script ejercicios 4
Escuela Tcnica Superior
de Ingeniera Informtica
Departamento de Lenguajes
y Sistemas Informticos
1. Procedimientos y
funciones
--- Procedimientos annimos para obtener los tres empleados con ms subordinados
con bucle while
DECLARE
wjefe CHAR(4);
wcount INTEGER;
CURSOR c IS
SELECT cojefe,count(*) AS cuenta FROM empleados
GROUP BY cojefe ORDER BY 2 DESC;
fila c%ROWTYPE;
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Secuencias
2.1 Definicin
BEGIN
3. Cursores
31
CLOSE c;
END;
/