martes, 13 de julio de 2010

Trabajo- Ejercicios del blog

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 100, a continuación muestra los valores que están dentro de la segunda etiqueta que es 150, combinando con la etiqueta externa que es 100.


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:

Este programa muestra el uso de estructuras de iteración WHILE-LOOP-END LOOP con EXIT y etiquetas, es decir inicializa a cada contador el cual cada uno imprime una frase, primero cumple el procedimiento del while interno hasta que este no se cumpla con la condición no podrá termina, en caso que le bucle haya terminado seguirá con el loop externo hasta que la condición se cumpla, finalizando con los bucles que hayan terminado su condiciones y cierra con la salida del procedimiento