1) EJERCICIO
SET ServerOutput ON;
SET VERIFY OFF;
CREATE OR REPLACE PROCEDURE proc01
IS
BEGIN
dbms_output.put_line('Hola mundo con los procedimientos de Oracle');
END;
/
EJECUTAR:
execute proc01
RESULTADO:
Imprime la frase ->Hola mundo con los procedimientos de Oracle
2) EJERCICIO
SET SERVEROUTPUT ON;
SET VERIFY OFF;
CREATE
OR
REPLACE
PROCEDURE
proc02 IS
BEGIN
dbms_output.put_line('Otro procedimiento pero ahora con otro texto');
END
proc02;
EJECUTAR:
SQL> execute proc02;
Otro procedimiento pero ahora con otro texto
RESULTADO:
Lo que realiza este código es crear un procedimiento en el cual imprima una frase y finalmente se cerrara con el nombre del procedimiento
3) EJERCICIO
SET ServerOutput ON;
SET VERIFY OFF;
CREATE OR REPLACE PROCEDURE proc03 IS
v_fecha_sistema DATE;
v_fecha_contratacion v_fecha_sistema%TYPE;
v_salario employees.salary%TYPE;
reg_empleados employees%ROWTYPE;
BEGIN
SELECT sysdate INTO v_fecha_sistema FROM dual;
SELECT * INTO reg_empleados FROM employees WHERE employee_id=200;
v_salario := reg_empleados.salary;
v_fecha_contratacion := reg_empleados.hire_date;
dbms_output.put_line('El nombre del empleado es:'||reg_empleados.first_name);
dbms_output.put_line('El salario del empleado es:'||v_salario);
dbms_output.put_line('La fecha de contratación del empleado es:'||v_fecha_contratacion);
dbms_output.put_line('La fecha del sistema es:'||v_fecha_sistema);
END proc03;
/
EJECUTAR:
execute proc03
RESULTADO:
El nombre del empleado es:Jennifer
El salario del empleado es:4400
La fecha de contratación del empleado es:17/09/87
La fecha del sistema es:07/07/10
Este procedimiento despliega los datos del empleado de employee_id=200
4) EJERCICIO
CREATE
OR
REPLACE
PROCEDURE
proc04 IS
BEGIN
<
DECLARE
v_cantidad NUMBER := 100;
BEGIN
DECLARE
v_cantidad NUMBER := 150;
BEGIN
-- Inicio de un bloque de codigo interno
dbms_output.put_line('Valor de la variable interna:'||v_cantidad);
dbms_output.put_line('Valor de la variable externa:'||ambito_externo.v_cantidad);
END;
-- Aqui podemos continuar con los datos de la variable etiquetada externamente
dbms_output.put_line('Valor de la variable:'||v_cantidad);
END;
END
proc04;
EJECUTAR:
SQL> execute proc04;
Valor de la variable interna:150
Valor de la variable externa:100
Valor de la variable:100
RESULTADO:
Este programa muestra el funcionamiento de las etiquetas con procedimientos, es decir imprime el valor que se encuentra en la primera definición en este caso
5) EJERCICIO
SET ServerOutput ON;
SET VERIFY OFF;
CREATE OR REPLACE PROCEDURE proc05
IS
-- Funcion sumar:
FUNCTION sumar(ope1 IN NUMBER,ope2 IN NUMBER)
RETURN
NUMBER
IS
BEGIN
RETURN ope1+ope2;
END sumar;
-- Funcion restar:
FUNCTION restar(ope1 IN NUMBER,ope2 IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN ope1-ope2;
END restar;
-- Funcion multiplicar:
FUNCTION multiplicar(ope1 IN NUMBER,ope2 IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN ope1*ope2;
END multiplicar;
-- Funcion dividir:
FUNCTION dividir(ope1 IN NUMBER,ope2 IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN ope1/ope2; END dividir;
BEGIN
dbms_output.put_line('Suma de 15 y 45: '||sumar(15,45));
dbms_output.put_line('Resta de 15 y 45: '||restar(15,45));
dbms_output.put_line('Multiplicacion de 15 y 45: '||multiplicar(15,45));
dbms_output.put_line('Division de 15 y 45: '||dividir(15,45));
END proc05;
/
EJECUTAR:
execute proc05
RESULTADO:
Suma de 15 y 45: 60
Resta de 15 y 45: -30
Multiplicacion de 15 y 45: 675
Division de 15 y 45: ,3333333333333333333333333333333333333333
Este ejercicio realiza las 4 operaciones: suma, resta, multilpicacion y division.
Para realizar estas operaciones utiliza cuatro funciones dentro de un procedimiento.
6) EJERCICIO
CREATE
OR
REPLACE
PROCEDURE
proc06(vi_cantidad_minima IN
INTEGER) IS
v_sueldo_base NUMBER := 4000;
v_cantidad_empleados INTEGER
:= 0;
BEGIN
--Obtenemos la cantidad de empleados que tienen un sueldo mayor al sueldo base
SELECT
COUNT(employee_id) INTO
v_cantidad_empleados FROM
employees
WHERE
salary > v_sueldo_base;
-- Testeamos si la cantidad de empleados es mayor a una constante
dbms_output.put_line('La cantidad de empleados es:'||v_cantidad_empleados);
dbms_output.put_line('-----------------------------------------------------');
dbms_output.put_line('Uso de las estructura if-then');
IF v_cantidad_empleados > vi_cantidad_minima THEN
dbms_output.put_line('La cantidad de empleados:'||v_cantidad_empleados||', ES MAYOR a la minima');
END
IF;
dbms_output.put_line('Uso de las estructura if-then-else');
IF v_cantidad_empleados > vi_cantidad_minima THEN
dbms_output.put_line('La cantidad de empleados:'||v_cantidad_empleados||', ES MAYOR a la minima');
ELSE
dbms_output.put_line('La cantidad de empleados:'||v_cantidad_empleados||', NO ES MAYOR a la minima');
END
IF;
END
proc06;
EJECUTAR
SQL> execute proc06(60);
La cantidad de empleados es:64
---------------------------------------------------
Uso de las estructura if-then
La cantidad de empleados:64, ES MAYOR a la minima
Uso de las estructura if-then-else
La cantidad de empleados:64, ES MAYOR a la minima
RESULTADO
El objetivo de este programa es mostrar el funcionamiento de IF-THEN y IF-THEN-ELSE en un procedimiento, ingresando el valor como entrada en la variable establecida en el procedimiento, esta ira comparando con cada condicionante, en el primer caso que es IF-THEN si la cantidad que se contó de empleados no es mayor al numero ingresado entonces termina el condicionante y continua el programa. En el caso del uso del IF-THEN-ELSE, esta compara con el condicionante si el contador del select es mayor a la cantidad ingresada impree una frase en caso que no sea así imprime otro mensaje y termina con el cierre del procedimiento.
7) EJERCICIO
SET ServerOutput ON;
SET VERIFY OFF;
CREATE OR REPLACE
PROCEDURE proc07(vi_cantidad_iteraciones IN INTEGER)
IS
v_contador1 INTEGER := 0;
v_contador2 INTEGER := 0;
BEGIN
-- Primero con una declaración EXIT para salir de un bucle.
dbms_output.put_line('Iteracion con clausula EXIT');
LOOP
IF v_contador1 = vi_cantidad_iteraciones THEN
EXIT;
ELSE
dbms_output.put_line('Iterando con EXIT');
END IF;
v_contador1 := v_contador1 + 1; END LOOP;
--Ahora iteramos pero con la clausula EXIT WHEN v_contador1 := 0;
dbms_output.put_line('Iteracion con la clausula EXIT WHEN');
LOOP
v_contador1 := v_contador1 + 1;
dbms_output.put_line('Iterando con EXIT WHEN');
EXIT WHEN v_contador1 >= 20;
END LOOP;
--Ahora iteramos con la clausula EXIT WHEN con etiquetas
v_contador1 := 0;
v_contador2 := 0;
dbms_output.put_line('Iteracion con la clausula EXIT WHEN CON ETIQUETAS');
<
LOOP
v_contador1 := v_contador1 + 1;
dbms_output.put_line('Iterando con EXIT WHEN');
v_contador2 := 0;
<
LOOP
v_contador2 := v_contador2 + 1;
dbms_output.put_line('Iterando con EXIT WHEN ANIDADO');
EXIT externo WHEN (v_contador1 = 2 AND v_contador2 = 3);
EXIT interno WHEN v_contador2 >= 3;
END LOOP;
EXIT externo WHEN v_contador1 >= 3;
END LOOP;
END proc07;
/
EJECUTAR:
execute proc07(5)
RESULTADO:
Iteracion con clausula EXIT
Iterando con EXIT
Iterando con EXIT
Iterando con EXIT
Iterando con EXIT
Iterando con EXIT
Iteracion con la clausula EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iterando con EXIT WHEN
Iteracion con la clausula EXIT WHEN CON ETIQUETAS
Iterando con EXIT WHEN
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO
Este procedimiento imprime variar veces un determinado mensaje, indicando las iteraciones con Exit, con WHILE y con WHILE CON ETIQUETAS.
Ademas para executar este procedimiento se requiere enviar la cantidad de iteraciones q deseamos.
8) EJERCICIO
CREATE
OR
REPLACE
PROCEDURE
proc08(vi_cantidad_iteraciones IN
INTEGER) IS
v_contador1 INTEGER
:= 0;
v_contador2 INTEGER
:= 0;
v_contador3 INTEGER
:= 0;
BEGIN
--Ahora iteramos con la clausula EXIT WHEN con etiquetas
v_contador1 := 0;
v_contador2 := 0;
dbms_output.put_line('Iteracion con la clausula EXIT WHEN CON ETIQUETAS');
<
LOOP
v_contador1 := v_contador1 + 1;
dbms_output.put_line('Iterando con EXIT WHEN');
v_contador2 := 0;
<
LOOP
v_contador2 := v_contador2 + 1;
dbms_output.put_line('Iterando con EXIT WHEN ANIDADO');
v_contador3 := 0;
WHILE (v_contador3 <>
v_contador3 := v_contador3 + 1;
dbms_output.put_line('Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP');
END
LOOP;
EXIT externo WHEN
(v_contador1 = 2 AND
v_contador2 = 3);
EXIT interno WHEN
v_contador2 >= 3;
END
LOOP;
EXIT externo WHEN
v_contador1 >= 3;
END
LOOP;
END
proc08;
EJECUTAR:
SQL> execute proc08(2);
Iteracion con la clausula EXIT WHEN CON ETIQUETAS
Iterando con EXIT WHEN
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
Iterando con EXIT WHEN ANIDADO CON WHILE-LOOP-END LOOP
RESULTADO: