Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
25/11/2013
1. Procedimientos
y funciones
1.1 Definicin
Funciones, procedimientos
y cursores en Oracle
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
Universidad de Sevilla
Noviembre 2013
procedimientos en Oracle.
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
noviembre 2013
IISSI
4. Scripts
25/11/2013
Procedimientos y funciones
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
Procedimientos y funciones
Sintaxis Procedimientos
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
IISSI
1. Procedimientos
y funciones
25/11/2013
Procedimientos y funciones
Sintaxis Funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
1. Procedimientos
y funciones
Procedimientos y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
IISSI
1. Procedimientos
y funciones
Descripcin de la sintaxis:
Nombre
Nombre--parmetro
parmetro: es el nombre que queramos dar al
parmetro. Podemos utilizar mltiples parmetros. En caso de
no necesitarlos, podemos omitir los parntesis.
IN
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
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
OUT: Son parmetros de entrada y salida a la vez.
Tipo
Tipo--de
de--dato
dato: Indica el tipo de dato PLSQL que corresponde al
parmetro (NUMBER, VARCHAR2, etc).
25/11/2013
Procedimientos y funciones
1. Procedimientos
y funciones
IN
w_depart
1.1 Definicin
emp.codigo_emp%TYPE,
IN
emp.cod_depart%TYPE,
1.2 Llamadas
w_fecha_alta
1.3 Documentacin
IN
emp.fecha_alta%TYPE)
IS
1.4 Depuracin
2. Cursores
BEGIN
3. Ejercicios
4. Scripts
END contratar_empleado;
En este procedimiento se ha definido el tipo de dato de los parmetros de
entrada como del mismo tipo que los campos de la tabla emp , es decir:
number,
w_depart
varchar..
noviembre 2013
nombreParametro IN nombreTabla.nombreColumna%TYPE
%TYPE.
%TYPE
Procedimientos y funciones
(w_cdigo_emp IN emp.cdigo_emp%TYPE)
1.1 Definicin
RETURN NUMBER
1.2 Llamadas
1.3 Documentacin
IS
1.4 Depuracin
w_salario
emp.salario_emp%TYPE;
BEGIN
2. Cursores
2.1 Bucle FOR
SELECT salario_emp
2.2 Atributos
FROM
3. Ejercicios
4. Scripts
INTO
w_salario
emp
= w_cdigo_emp;
RETURN w_salario;
noviembre 2013
IISSI
END obtener_salario;
25/11/2013
Procedimientos y funciones
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
Procedimientos y funciones
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. Cursores
2.1 Bucle FOR
END;
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
IISSI
25/11/2013
Procedimientos y funciones
Llamadas a funciones
1. Procedimientos
y funciones
BEGIN
1.1 Definicin
1.2 Llamadas
IS
...
...
/* llamada a la funcin obtener_salario */
1.3 Documentacin
w_sal :=obtener_salario
obtener_salario (w_cdigo);
1.4 Depuracin
END;
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
END;
noviembre 2013
10
Procedimientos y funciones
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
IISSI
11
25/11/2013
Procedimientos y funciones
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
2.2 Atributos
3. Ejercicios
4. Scripts
Procedimiento
Descripcin
DBMS_OUTPUT.PUT
DBMS_OUTPUT.NEW_LINE
DBMS_OUTPUT.PUT_LINE
noviembre 2013
12
1.4 Depuracin
2. Cursores
Cursores
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.2 Atributos
3. Ejercicios
4. Scripts
Declare
Open
Fetch
Close
noviembre 2013
IISSI
CLOSE cursor_1;
13
25/11/2013
Cursores
DECLARE
CURSOR cursor_1 IS
SELECT nombre, nmero, salario
FROM emp
ORDER BY salario;
w_nombre
emp.nombre%TYPE;
w_nmero
emp.nmero%TYPE;
w_salario
BEGIN
emp.salario%TYPE;
...
CLOSE cursor_1;
END;
noviembre 2013
14
OPEN cursor_1;
FETCH cursor_1 INTO w_nombre, w_nmero, w_salario;
Cursores
CURSOR cursor_1 IS
SELECT nombre, nmero, salario
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
FROM emp
w_registro
ORDER BY salario;
cursor_1%ROWTYPE;
cursor_1%ROWTYPE
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
BEGIN
OPEN cursor_1;
FETCH cursor_1 INTO w_registro;
...
CLOSE cursor_1;
IISSI
15
END;
25/11/2013
Cursores
DECLARE
CURSOR c1
2.2 Atributos
IS
3. Ejercicios
4. Scripts
BEGIN
FOR c1rec
IN
c1
LOOP
END LOOP;
END;
noviembre 2013
16
...
Cursores
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
%FOUND
Devuelve true si el ltimo FETCH
evaluado devuelve la siguiente fila.
%NOTFOUND Devuelve true si el ltimo FETCH
evaluado no devuelve ninguna fila.
%ISOPEN
Devuelve true si el cursor especificado
est abierto.
noviembre 2013
IISSI
17
%ROWCOUNTContador
inicialmente a cero, que se
%ROWCOUNT
incrementa en uno tras el FETCH de cada fila.
25/11/2013
Cursores
DECLARE
CURSOR cursor_1 IS
SELECT nombre, salario FROM empleados;
registro
cursor_1%ROWTYPE
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
BEGIN
IF NOT (cursor_1%ISOPEN
%ISOPEN)
%ISOPEN THEN OPEN cursor_1;
ENDIF;
4. Scripts
noviembre 2013
18
LOOP
Ejercicio 1
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
integer,
char(10)
not null,
salario
number(9,2)
DEFAULT 100000,
fecha_nac
date
DEFAULT SYSDATE,
comision
number(3,2)
CHECK (comision>=0 AND comision <=1),
cod_jefe
integer,
IISSI
19
10
25/11/2013
Ejercicio 2
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
noviembre 2013
20
4. Scripts
Ejercicio 3
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
noviembre 2013
IISSI
21
4. Scripts
11
25/11/2013
Ejercicio 4
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
noviembre 2013
22
4. Scripts
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
IISSI
23
12
25/11/2013
1.1 Definicin
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
24
1.2 Llamadas
Script ejercicios 4
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
IISSI
25
1. Procedimientos
y funciones
13
25/11/2013
Script ejercicios 4
--- Procedimientos annimos para obtener los tres empleados con
1. Procedimientos
y funciones
1.1 Definicin
1.2 Llamadas
1.3 Documentacin
1.4 Depuracin
2. Cursores
2.1 Bucle FOR
SET SERVEROUTPUT ON
DECLARE
CURSOR c IS
SELECT cojefe,count(*) AS cuenta FROM empleados
GROUP BY cojefe ORDER BY 2 DESC;
2.2 Atributos
3. Ejercicios
BEGIN
4. Scripts
noviembre 2013
26
END;
/
Script ejercicios 4
--- Procedimientos annimos para obtener los tres empleados con ms
subordinados con bucle normal
1. Procedimientos
y funciones
-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. Cursores
2.1 Bucle FOR
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;
2.2 Atributos
3. Ejercicios
4. Scripts
noviembre 2013
IISSI
27
END;
/
14
25/11/2013
Script ejercicios 4
--- 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. Cursores
2.1 Bucle FOR
2.2 Atributos
BEGIN
DBMS_OUTPUT.PUT_LINE('Prueba de cursor (3 superjefes) con
Open/Fetch/Close ** BUCLE WHILE');
OPEN c;
WHILE c%ROWCOUNT<3 LOOP
FETCH c INTO fila;
EXIT WHEN C%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(fila.cojefe||' '||fila.cuenta);
END LOOP;
3. Ejercicios
4. Scripts
CLOSE c;
END;
/
-- Para no crear ningn objeto en la BD
ROLLBACK WORK;
noviembre 2013
IISSI
28
1. Procedimientos
y funciones
15