Replica

37
REPLICACIÓN DE BASE DE DATOS ORACLE 10G EXPRESS EDITION AUTORES: FERNANDO JARAMILLO DIEGO ESPARZA PATRICIA LEMA

Transcript of Replica

Page 1: Replica

REPLICACIÓN DE BASE DE DATOS ORACLE 10G EXPRESS EDITION

AUTORES:

FERNANDO JARAMILLO

DIEGO ESPARZA

PATRICIA LEMA

Page 2: Replica

REPLICACIÓN DE BASE DE DATOS ORACLE

10G EXPRESS EDITION

HACER:

Instalación de Oracle 10g Express Edition

Las 2 máquinas tienen que estar conectadas en red para hacer uso de a practica cliente-servidor

Crear la database link dentro del hr, en la máquina que hace de servidor

Page 3: Replica

create database link replica connect to HR identified by "hr" using

'(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =

10.1.1.2)(PORT = 1521))(CONNECT_DATA =(SERVER =

DEDICATED)(SERVICE_NAME = XE)))';

En donde replica, corresponde al nombre del link

HOST, nombre del equipo o la dirección ip

PORT, el puerto que utiliza el oracle por default

Page 4: Replica

CREACION DE LA TABLA

create table equipo

(

NOMEQ varchar(50) not null,

DESCRIPCION varchar(50) null,

constraint PK_EQUIPO primary key (NOMEQ)

);

insert into equipo(nomeq,descripcion) values('Amore Vita','Ricardo Padacci');

insert into equipo(nomeq,descripcion) values('Banesto','Miguel Echevarria');

Page 5: Replica

CREAMOS EL TRIGGER EN LA MÁQUINA DEL SERVIDOR

create or replace trigger grupo4

after insert or delete or update on equipo

declare cursor mostrar is

select * from equipo;

v_nombre equipo.nomeq%type;

v_descripcion equipo.descripcion%type;

BEGIN

DELETE FROM equipo@grupo4;

OPEN mostrar;

LOOP

FETCH mostrar INTO v_nombre, v_descripcion;

EXIT WHEN mostrar%NOTFOUND;

INSERT INTO equipo@replica (nomeq,descripcion)

VALUES (v_nombre, v_descripcion);

END LOOP;

CLOSE mostrar;

END grupo4;

Page 6: Replica

Ingresamos a la línea de comandos SQL Express Edition en el cliente y ponemos:

connect hr/hr

password: hr

connect [email protected] // ip del servidor

select *from equipo@replica // equipo, nombre de la tabla------ replica, nombre del link

posteriormente nos muestra la tabla q contiene el servidor

4.1) De la misma forma para el servidor en la línea de comandos:

connect hr/hr

password: hr

connect [email protected] // ip del cliente

LISTO !!!

Page 7: Replica

EJERCICIOS PLSQL

Page 8: Replica

HACIENDO USO DEL BUCLE LOOP

Lo que hace este programa es la ejecución de los números del 1 al 10, ya que utiliza un

contador que empieza desde uno y termina cuando llegua a 10.

set serveroutput on // libreria para ejecutar el archivo

set verify off // libreria

DECLARE

cont NUMBER :=1;

BEGIN

LOOP

DBMS_OUTPUT.PUT_LINE(cont);

EXIT WHEN cont=10;

cont:=cont+1;

END LOOP;

END;

Page 9: Replica

HACIENDO USO DEL BUCLE WHILE

Lo que hace este programa es la ejecución de los números del 1 al 10, ya que utiliza un

contador que empieza desde uno y termina cuando llegue a 10.

DECLARE

cont NUMBER :=1;

BEGIN

WHILE cont<=10 LOOP

DBMS_OUTPUT.PUT_LINE(cont);

cont:=cont+1;

END LOOP;

END;

Page 10: Replica

Lo que hace este programa es la ejecución de los números del 1 al 10 en reversa, ya que

utiliza un contador que empieza desde 10 y termina cuando llegue a 1.

DECLARE

BEGIN

FOR CONT IN REVERSE 1..10 LOOP

DBMS_OUTPUT.PUT_LINE(CONT);

END LOOP;

END;

HACIENDO USO DEL BUCLE FOR

Page 11: Replica

Lo que hace este programa es la ejecución de 4 números del 1 al 4, repetidos 10 veces

la misma impresión.

DECLARE

BEGIN

FOR I IN 1..10 LOOP

FOR J IN 1..30 LOOP

EXIT WHEN J=5;

DBMS_OUTPUT.PUT_LINE(J);

END LOOP;

END LOOP;

END;

HACIENDO USO DEL BUCLE DOBLE FOR

Page 12: Replica

Lo que hace el programa es ingresar por teclado un valor

Si el valor corresponde a menor que 50 es igual a valor pequeño

Si el valor corresponde a menor que 100 es igual a valor mediano

Si el valor corresponde a mayor que 50 y 100 es igual a valor grande

DECLARE

V_NUM NUMBER :=&V;

BEGIN

IF V_NUM <50 THEN

DBMS_OUTPUT.PUT_LINE ('VALOR PEQUENO');

ELSIF V_NUM <100 THEN

DBMS_OUTPUT.PUT_LINE ('VALOR MEDIANO');

ELSE

DBMS_OUTPUT.PUT_LINE ('VALOR GRANDE');

END IF;

END;

HACIENDO USO DEL BUCLE IF

Page 13: Replica

Este programa calcula la media de 2 números

declare

numero1 number:=&n1;

numero2 number:=&n2;

media number;

begin

media:=(numero1+numero2)/2;

dbms_output.put_line('la media es:'||media);

end;

MEDIA DE 2 NÚMEROS

Page 14: Replica

Este programa nos muestra que si el profe1 <profe2 entonces el profe1 está cerca a 0

si el profe1 >profe2 entonces el profe2 está cerca a 0

si el profe1 =profe2 entonces los 2 profesores son iguales

declare

profe1 number:=&p1;

profe2 number:=&p2;

profe number;

begin

if profe1<profe2 then

dbms_output.put_line('El profe1 está cerca a 0');

elsif profe1>profe2 then

dbms_output.put_line('El profe2 está cerca a 0');

else

dbms_output.put_line ('los 2 profesores son iguales');

end if;

end;

IDENTIFICADOR DE PROFESORES

Page 15: Replica

Este programa muestra la conversión de segundos a horas, minutos y segundos.

declare

s number:=&segundos;

horas number;

minutos number;

segundo number;

begin

horas:=(s)*3600;

dbms_output.put_line( 'Convertir ' ||s);

dbms_output.put_line( 'segundos a :');

dbms_output.put_line('-------------------------');

dbms_output.put_line('horas ' ||horas);

minutos:=(s)*60;

dbms_output.put_line('minutos '||minutos);

segundo:=(s)*1;

dbms_output.put_line('segundos '||segundo);

end;

CONVERSION DE TIEMPO

Page 16: Replica

Este programa utiliza un cursor el cual nos muestra el nombre de los departamentos junto con su

salario

set verify off

set serveroutput on

declare

CURSOR cursorProvincias IS

SELECT d.department_name, SUM(e.salary) AS SALARIO

FROM employees e

JOIN departments d USING (department_id)

GROUP BY d.department_name;

v_nombre departments.department_name%TYPE;

v_poblacion employees.salary%TYPE;

BEGIN

OPEN cursorProvincias;

LOOP

FETCH cursorProvincias INTO v_nombre,

v_poblacion;

EXIT WHEN cursorProvincias%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(v_nombre || ',' ||

v_poblacion);

END LOOP;

CLOSE cursorProvincias;

END;

UTILIZACIÓN DEL CURSOR

Page 17: Replica

Este programa hace uso de un cursor, despliega el nombre del empleado junto con su sueldo; e

identificando si corresponde a un sueldo alto, medio o bajo

DECLARE

CURSOR cursorSalarios IS

SELECT e.first_NAME,SUM(E.SALARY) FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L,COUNTRIES C,REGIONS R

WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID AND D.LOCATION_ID=L.LOCATION_ID AND L.COUNTRY_ID=C.COUNTRY_ID

AND C.REGION_ID=R.REGION_ID AND REGION_NAME='Europe' group by e.first_name;

v_nombre employees.first_name%TYPE;

v_salary employees.salary%TYPE;

BEGIN

OPEN cursorSalarios;

LOOP

IF v_salary<6000 THEN

DBMS_OUTPUT.PUT_LINE('EL empleado '|| v_nombre || ' con una sueldo de ' || v_salary || ' tiene sueldos bajos');

ELSIF v_salary<10000 and v_salary>2500 THEN

DBMS_OUTPUT.PUT_LINE('EL empleado '|| v_nombre || ' con un sueldo de ' || v_salary || ' tiene sueldos medios');

ELSIF v_salary>10000 THEN

DBMS_OUTPUT.PUT_LINE('EL empleado '|| v_nombre || ' con un sueldo de ' || v_salary || ' tiene sueldos altos');

END IF;

FETCH cursorSalarios INTO v_nombre,v_salary;

EXIT WHEN cursorSalarios%NOTFOUND;

END LOOP;

CLOSE cursorSalarios;

END;

UTILIZACIÓN DEL CURSOR 2

Page 18: Replica

Este programa hace uso del arroba

DECLARE

V_NUM NUMBER:=0;

V_MAIL VARCHAR2(100);

V_CORREO VARCHAR2:=&P

BEGIN

V_NUM:=INSTR(V_CORREO,'@',1,1);

V_MAIL:=SUBSTR(V_CORREO,1,V_NUM-1);

DBMS.OUT.PUTLINE(V_MAIL);

END;

CORREO

Page 19: Replica

Este programa hace uso del cursor

DECLARE

CURSOR C_UNO IS

SELECT E.DEPARTMENT_ID, D.DEPARTMENT_NAME, E.MANAGER_ID,

L.LOCATION_ID, L.STREET_ADDRESS, L.CITY, L.STATE_PROVINCE

FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L,COUNTRIES C,REGIONS R

WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID AND D.LOCATION_ID=L.LOCATION_ID

AND L.COUNTRY_ID=C.COUNTRY_ID AND C.REGION_ID=R.REGION_ID;

A EMPLOYEES.DEPARTMENT_ID%TYPE;

B DEPARTMENTS.DEPARTMENT_NAME%TYPE;

C EMPLOYEES.MANAGER_ID%TYPE;

D LOCATIONS.LOCATION_ID%TYPE;

E LOCATIONS.STREET_ADDRESS%TYPE;

F LOCATIONS.CITY%TYPE;

G LOCATIONS.STATE_PROVINCE%TYPE;

CURSORES

Page 20: Replica

BEGIN

OPEN C_UNO;

LOOP

FETCH C_UNO INTO A,B,C,D,E,F,G;

EXIT WHEN C_UNO%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(A||'-'||B||'-'||C||'-'||

D||'-'||E||'-'||F||'-'||G);

END LOOP;

CLOSE C_UNO;

END;

Page 21: Replica

CREATE OR REPLACE PACKAGE PAQUETE1 IS

PROCEDURE PROC01;

PROCEDURE PROC02;

END PAQUETE1;

CREACIÓN DE PAQUETES

Page 22: Replica

CREATE OR REPLACE PACKAGE BODY paquete1 IS

PROCEDURE proc01

IS

BEGIN

dbms_output.put_line('Hola mundo con los procedimientos de Oracle');

END proc01;

PROCEDURE proc02

IS

BEGIN

dbms_output.put_line('Hola Fercho !!!! ');

END proc02;

END paquete1;

EJEUCUCION DEL PAQUETE

set serveroutput on

set verify off

execute paquete1.proc02;

CUERPO DEL PAQUETE

Page 23: Replica

Este programa lo que nos muestra es la ejecución de un trigger en el cual al momento de insertar

datos en la tabla autores y la tabla libros; nos muestra una estadística del total de libros ingresados

por ese género.

CREATE OR REPLACE TRIGGER ActualizarEstadisticas

AFTER INSERT OR DELETE OR UPDATE ON LIBROS

DECLARE CURSOR c_Estadisticas IS

SELECT GENERO,

COUNT(*)total_libros,

AVG(precio)precio_medio

FROM LIBROS

GROUP BY GENERO;

v_genero ESTADISTICAS.genero%TYPE;

v_total_libros ESTADISTICAS.total_libros%TYPE;

v_precio_medio ESTADISTICAS.precio_medio%TYPE; ------->

CREACIÓN DE UN TRIGGER

Page 24: Replica

BEGIN

DELETE FROM ESTADISTICAS;

OPEN c_Estadisticas;

LOOP

FETCH c_Estadisticas INTO v_genero,v_total_libros,v_precio_medio;

EXIT WHEN c_Estadisticas%NOTFOUND;

INSERT INTO estadisticas(genero,total_libros,precio_medio)

VALUES (v_genero,v_total_libros,v_precio_medio);

DBMS_OUTPUT.PUT_LINE(v_genero||' '|| v_total_libros||'

'||v_precio_medio);

END LOOP;

CLOSE c_Estadisticas;

END ActualizarEstadisticas;

CREACIÓN DE UN TRIGGER

Page 25: Replica

Este programa despliega el texto q se manda a imprimir del procedimiento creado proc01

CREATE OR REPLACE PROCEDURE proc01 IS

BEGIN

dbms_output.put_line('Hola mundo con los procedimientos de Oracle');

END;

EJECUTAR PROCEDIMIENTO

set serveroutput on;

set verify off;

execute proc01;

CREAR PROCEDIMIENTO

EJEMPLO 1

Page 26: Replica

Este programa despliega el texto q se manda a imprimir del procedimiento creado

proc02

CREATE OR REPLACE PROCEDURE PROC02 IS

BEGIN

DBMS_OUTPUT.PUT_LINE('OTRO PROCEDIMIENTO PERO AHORA CON OTRO TEXTO');

END PROC02;

EJECUTAR PROCEDIMIENTO

set serveroutput on;

set verify off;

execute proc02;

CREAR PROCEDIMIENTO

EJEMPLO 2

Page 27: Replica

Este programa despliega nombre del empleado, salario del empleado, fecha de

contratación, fecha del sistema de la tabla employees donde employeed_id=200

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;

CREAR PROCEDIMIENTO

EJEMPLO 3

Page 28: Replica

Este programa despliega:

Valor de la variable interna, valor de la variable externa, valor de la variable

CREATE OR REPLACE PROCEDURE PROC04 IS

BEGIN

<<AMBITO_EXTERNO>>

DECLARE

V_CANTIDAD NUMBER := 100;

BEGIN

DECLARE

V_CANTIDAD NUMBER := 150;

BEGIN

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;

DBMS_OUTPUT.PUT_LINE('VALOR DE LA VARIABLE:'||V_CANTIDAD);

END;

END PROC04;

CREAR PROCEDIMIENTO

EJEMPLO 4

Page 29: Replica

Este programa realize varias funciones dentro de un bloque. Realiza 4 funciones que

son:

Sumar, Restar, Multiplicar, Dividir. Por ultimo imprime llamando a las 4 funciones con

los valores de 15 y 45 y muestra los valores con las respectivas operaciones.

CREATE OR REPLACE PROCEDURE proc05 IS

FUNCTION sumar(ope1 IN NUMBER,ope2 IN NUMBER)

RETURN NUMBER IS BEGIN RETURN ope1+ope2; END sumar;

FUNCTION restar(ope1 IN NUMBER,ope2 IN NUMBER)

RETURN NUMBER IS BEGIN RETURN ope1-ope2; END restar;

FUNCTION multiplicar(ope1 IN NUMBER,ope2 IN NUMBER)

RETURN NUMBER IS BEGIN RETURN ope1*ope2; END multiplicar;

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;

CREAR PROCEDIMIENTO

EJEMPLO 5

Page 30: Replica

Este programa realiza una comparación con la cantidad mínima ingresada por el usuario.

Realiza la estructura del if-then-else para entender de la mejor manera y para ello en la

ejecución del programa colocamos un valor menor al de la cantidad de empleados para

poder ver claramente lo que realiza el primer if y luego ejecutamos de nuevo pero con

un valor mayor a la cantidad de empleados para que muestre lo que realiza el segundo if.

CREATE OR REPLACE PROCEDURE PROC06(VI_CANTIDAD_MINIMA IN INTEGER)

IS V_SUELDO_BASE NUMBER := 4000; V_CANTIDAD_EMPLEADOS INTEGER := 0;

BEGIN

SELECT COUNT(EMPLOYEE_ID) INTO V_CANTIDAD_EMPLEADOS FROM EMPLOYEES

WHERE SALARY > V_SUELDO_BASE;

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; --------

CREAR PROCEDIMIENTO

EJEMPLO 6

Page 31: Replica

CREAR PROCEDIMIENTO

EJEMPLO 6

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;

Page 32: Replica

CREAR PROCEDIMIENTO

EJEMPLO 7

CREATE OR REPLACE PROCEDURE PROC07(VI_CANTIDAD_ITERACIONES IN INTEGER)

IS V_CONTADOR1 INTEGER := 0; V_CONTADOR2 INTEGER := 0;

BEGIN

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;

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; -------

Page 33: Replica

V_CONTADOR1 := 0; V_CONTADOR2 := 0;

DBMS_OUTPUT.PUT_LINE('ITERACION CON LA CLAUSULA EXIT WHEN CON ETIQUETAS');

<<EXTERNO>>

LOOP V_CONTADOR1 := V_CONTADOR1 + 1;

DBMS_OUTPUT.PUT_LINE('ITERANDO CON EXIT WHEN');

V_CONTADOR2 := 0;

<<INTERNO>>

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;

CREAR PROCEDIMIENTO

EJEMPLO 7

Page 34: Replica

CREATE OR REPLACE PROCEDURE PROC08(VI_CANTIDAD_ITERACIONES IN INTEGER)

IS

V_CONTADOR1 INTEGER := 0; V_CONTADOR2 INTEGER := 0; V_CONTADOR3 INTEGER := 0;

BEGIN

V_CONTADOR1 := 0; V_CONTADOR2 := 0;

DBMS_OUTPUT.PUT_LINE('ITERACION CON LA CLAUSULA EXIT WHEN CON ETIQUETAS');

<<EXTERNO>>

LOOP

V_CONTADOR1 := V_CONTADOR1 + 1;

DBMS_OUTPUT.PUT_LINE('ITERANDO CON EXIT WHEN');

V_CONTADOR2 := 0;

<<INTERNO>>

LOOP

V_CONTADOR2 := V_CONTADOR2 + 1;

DBMS_OUTPUT.PUT_LINE('ITERANDO CON EXIT WHEN ANIDADO');

V_CONTADOR3 := 0;

WHILE (V_CONTADOR3 < 5 )

LOOP -------

CREAR PROCEDIMIENTO

EJEMPLO 8

Page 35: Replica

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;

CREAR PROCEDIMIENTO

EJEMPLO 8

Page 36: Replica

Este ejercicio realiza una consulta a la función llamada consultarEmpresa y muestra los valores que

existen en los campos de dicha búsqueda.

CREATE OR REPLACE PROCEDURE CONSULTAREMPRESA

(V_NOMBRE VARCHAR2, V_CIF OUT VARCHAR2, V_DIR OUT VARCHAR2)

IS

BEGIN

SELECT CIF, DIRECCION INTO V_CIF, V_DIR

FROM EMPRESAS

WHERE NOMBRE LIKE '%'||V_NOMBRE||'%';

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('NO SE ENCONTRARON DATOS');

WHEN TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE ('HAY MÁS DE UNA FILA CON ESOS’

||‘ DATOS');

END;

CREAR PROCEDIMIENTO

EJEMPLO 9

Page 37: Replica

Este ejercicio crea una funcion en la cual va a devolver el nombre y el apellido de los empleados y al

ejecutar realizamos una consulta que va a mostrar el nombre y apellido de los empleados llamandole

a la función con un parámetro que va a ser el employee_id y tamb el salario de los empleados.

SET SERVEROUTPUT ON;

SET VERIFY OFF;

CREATE OR REPLACE FUNCTION FUNEMP

(V_EMPLOYEE_ID NUMBER)

RETURN VARCHAR2

IS

V_NOMBRE VARCHAR2(60);

BEGIN

SELECT FIRST_NAME ||' '||LAST_NAME INTO V_NOMBRE

FROM EMPLOYEES WHERE EMPLOYEE_ID=V_EMPLOYEE_ID;

RETURN V_NOMBRE;

END;

CREAR PROCEDIMIENTO

EJEMPLO 10