Replica
Transcript of Replica
REPLICACIÓN DE BASE DE DATOS ORACLE 10G EXPRESS EDITION
AUTORES:
FERNANDO JARAMILLO
DIEGO ESPARZA
PATRICIA LEMA
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
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
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');
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;
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 !!!
EJERCICIOS PLSQL
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;
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;
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
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
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
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
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
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
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
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
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
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
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;
CREATE OR REPLACE PACKAGE PAQUETE1 IS
PROCEDURE PROC01;
PROCEDURE PROC02;
END PAQUETE1;
CREACIÓN DE PAQUETES
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
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
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
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
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
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
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
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
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
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;
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; -------
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
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
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
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
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