SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
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 hr@10.1.1.2 // 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 hr@10.1.1.1 // 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;
HACIENDO USO DEL BUCLE FOR

   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 DOBLE 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 IF

   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;
MEDIA DE 2 NÚMEROS

   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;
IDENTIFICADOR DE PROFESORES

     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;
CONVERSION DE TIEMPO

   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;
UTILIZACIÓN DEL CURSOR

    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 2

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

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

   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;
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;
CREACIÓN DE PAQUETES

CREATE OR REPLACE PACKAGE PAQUETE1 IS

PROCEDURE PROC01;
PROCEDURE PROC02;

END PAQUETE1;
CUERPO DEL PAQUETE

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;
CREACIÓN DE UN TRIGGER

   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;
CREAR PROCEDIMIENTO
                                EJEMPLO 1

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 2
   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 3
   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 4
   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 5
   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 6
   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


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;                                                             -------
CREAR PROCEDIMIENTO
                             EJEMPLO 7

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 8

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 9

   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 10

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

Contenu connexe

Tendances

Sesion02resuelto
Sesion02resueltoSesion02resuelto
Sesion02resueltoBenjamin Ch
 
Problemas propuestos clase 0-1
Problemas propuestos  clase 0-1Problemas propuestos  clase 0-1
Problemas propuestos clase 0-1Jefferson Prieto
 
Ejemplo C++
Ejemplo C++Ejemplo C++
Ejemplo C++David
 
Manual de pseint
Manual de pseintManual de pseint
Manual de pseintjuanrobyn
 
Funciones y procedimientos
Funciones y procedimientosFunciones y procedimientos
Funciones y procedimientosRichard Robalino
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoEnAutomático
 
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...GabrielGonzaloDavila
 
Guía práctica nº2
Guía práctica nº2Guía práctica nº2
Guía práctica nº2Mihaelt
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cZalimanunezc
 
PresentacióN 4
PresentacióN 4PresentacióN 4
PresentacióN 4pokerpc
 
Lenguajesdeprogramacion c nivel1-unidad1-03-funciones definidas por el usuario
Lenguajesdeprogramacion c nivel1-unidad1-03-funciones definidas por el usuarioLenguajesdeprogramacion c nivel1-unidad1-03-funciones definidas por el usuario
Lenguajesdeprogramacion c nivel1-unidad1-03-funciones definidas por el usuarioCarlos
 

Tendances (18)

Ejercicios
EjerciciosEjercicios
Ejercicios
 
Sesion02resuelto
Sesion02resueltoSesion02resuelto
Sesion02resuelto
 
Problemas propuestos clase 0-1
Problemas propuestos  clase 0-1Problemas propuestos  clase 0-1
Problemas propuestos clase 0-1
 
Pratica 02
Pratica 02Pratica 02
Pratica 02
 
Ejemplo C++
Ejemplo C++Ejemplo C++
Ejemplo C++
 
Manual de pseint
Manual de pseintManual de pseint
Manual de pseint
 
Funciones y procedimientos
Funciones y procedimientosFunciones y procedimientos
Funciones y procedimientos
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimiento
 
Trabajo dehoy (1)
Trabajo dehoy (1)Trabajo dehoy (1)
Trabajo dehoy (1)
 
Php1
Php1Php1
Php1
 
Php1
Php1Php1
Php1
 
Php
PhpPhp
Php
 
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...Actividad de aprendizaje nro 08   estructuras de control repetitivas while, d...
Actividad de aprendizaje nro 08 estructuras de control repetitivas while, d...
 
Guía práctica nº2
Guía práctica nº2Guía práctica nº2
Guía práctica nº2
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje c
 
PresentacióN 4
PresentacióN 4PresentacióN 4
PresentacióN 4
 
Clase 6
Clase 6Clase 6
Clase 6
 
Lenguajesdeprogramacion c nivel1-unidad1-03-funciones definidas por el usuario
Lenguajesdeprogramacion c nivel1-unidad1-03-funciones definidas por el usuarioLenguajesdeprogramacion c nivel1-unidad1-03-funciones definidas por el usuario
Lenguajesdeprogramacion c nivel1-unidad1-03-funciones definidas por el usuario
 

En vedette

En vedette (20)

Oracle
OracleOracle
Oracle
 
Developer Oracle 6i
Developer Oracle 6iDeveloper Oracle 6i
Developer Oracle 6i
 
Resumen sql-oracle
Resumen sql-oracleResumen sql-oracle
Resumen sql-oracle
 
Designer oracle
Designer oracleDesigner oracle
Designer oracle
 
Instalación de OracleXE 11g Windows
Instalación de OracleXE 11g WindowsInstalación de OracleXE 11g Windows
Instalación de OracleXE 11g Windows
 
Dba
DbaDba
Dba
 
Apuntes sqldeveloper v2
Apuntes sqldeveloper v2Apuntes sqldeveloper v2
Apuntes sqldeveloper v2
 
Sql developer. manual de usuario v1.2
Sql developer. manual de usuario v1.2Sql developer. manual de usuario v1.2
Sql developer. manual de usuario v1.2
 
Proceso de maduracion de las carnes
Proceso de  maduracion de las carnesProceso de  maduracion de las carnes
Proceso de maduracion de las carnes
 
Fundamentos de SELECT SQL
Fundamentos de SELECT SQLFundamentos de SELECT SQL
Fundamentos de SELECT SQL
 
elaboracion de productos carnicos
elaboracion de productos carnicoselaboracion de productos carnicos
elaboracion de productos carnicos
 
Manipulacion de Datos SQL cap10
Manipulacion de Datos SQL cap10Manipulacion de Datos SQL cap10
Manipulacion de Datos SQL cap10
 
ANÁLISIS, DISEÑO Y DESARROLLO DE UN SISTEMA DE INFORMACIÓN PARA LA AGILIZACIÓ...
ANÁLISIS, DISEÑO Y DESARROLLO DE UN SISTEMA DE INFORMACIÓN PARA LA AGILIZACIÓ...ANÁLISIS, DISEÑO Y DESARROLLO DE UN SISTEMA DE INFORMACIÓN PARA LA AGILIZACIÓ...
ANÁLISIS, DISEÑO Y DESARROLLO DE UN SISTEMA DE INFORMACIÓN PARA LA AGILIZACIÓ...
 
Maduracion de carne
Maduracion de carneMaduracion de carne
Maduracion de carne
 
Chorizo
ChorizoChorizo
Chorizo
 
PROCESO DE MADURACION DE LA CARNE
PROCESO DE MADURACION DE LA CARNEPROCESO DE MADURACION DE LA CARNE
PROCESO DE MADURACION DE LA CARNE
 
Proceso maduracion de la carne
Proceso maduracion de la carneProceso maduracion de la carne
Proceso maduracion de la carne
 
Exportar datos con oracle sql developer a excel
Exportar datos con oracle sql developer a excelExportar datos con oracle sql developer a excel
Exportar datos con oracle sql developer a excel
 
Manual oracle developer-10g
Manual oracle developer-10gManual oracle developer-10g
Manual oracle developer-10g
 
Manual de administración BD
Manual de administración BDManual de administración BD
Manual de administración BD
 

Similaire à Replica

Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresEdwin Romero
 
Guía didáctica estructura secuenciales
Guía didáctica estructura secuencialesGuía didáctica estructura secuenciales
Guía didáctica estructura secuencialesLeany González
 
Manual De Pascal
Manual De PascalManual De Pascal
Manual De PascalMANUELRSG
 
Manual Practico de Pascal
Manual Practico de PascalManual Practico de Pascal
Manual Practico de Pascalapohlo
 
5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptxDieguess
 
Grupo 6 turbopascal apesteguia (1)
Grupo 6 turbopascal apesteguia (1)Grupo 6 turbopascal apesteguia (1)
Grupo 6 turbopascal apesteguia (1)tonytenorio2
 
Diseño de algoritmos usando pseint
Diseño de algoritmos usando pseintDiseño de algoritmos usando pseint
Diseño de algoritmos usando pseintDaniel Zavala
 
Fundamentos de programación.pptx
Fundamentos de programación.pptxFundamentos de programación.pptx
Fundamentos de programación.pptxvrykowayne1
 
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Vladimir Pomares
 
Estructuras de seleccion
Estructuras de seleccionEstructuras de seleccion
Estructuras de seleccionClariza
 
Trabajo final programacion
Trabajo final programacionTrabajo final programacion
Trabajo final programacionCarlos G Mora
 
Guia didactica programacion estructurada unidad 4
Guia didactica programacion estructurada unidad 4Guia didactica programacion estructurada unidad 4
Guia didactica programacion estructurada unidad 4Sol Hernández
 
Pseudocódigo apunte segun sea y subrutinas
Pseudocódigo apunte segun sea y subrutinasPseudocódigo apunte segun sea y subrutinas
Pseudocódigo apunte segun sea y subrutinasAlejandro Canosa
 

Similaire à Replica (20)

Principios de Programacion
Principios de ProgramacionPrincipios de Programacion
Principios de Programacion
 
Forms 10g procedimientos y cursores
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursores
 
Guía didáctica estructura secuenciales
Guía didáctica estructura secuencialesGuía didáctica estructura secuenciales
Guía didáctica estructura secuenciales
 
Manual De Pascal
Manual De PascalManual De Pascal
Manual De Pascal
 
Manual Practico de Pascal
Manual Practico de PascalManual Practico de Pascal
Manual Practico de Pascal
 
Semana 2 Fundamentos de Python(Ciclos y Listas)
Semana 2   Fundamentos de Python(Ciclos y Listas)Semana 2   Fundamentos de Python(Ciclos y Listas)
Semana 2 Fundamentos de Python(Ciclos y Listas)
 
5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx
 
Grupo 6 turbopascal apesteguia (1)
Grupo 6 turbopascal apesteguia (1)Grupo 6 turbopascal apesteguia (1)
Grupo 6 turbopascal apesteguia (1)
 
Diseño de algoritmos usando pseint
Diseño de algoritmos usando pseintDiseño de algoritmos usando pseint
Diseño de algoritmos usando pseint
 
ejercicios-pascal
ejercicios-pascalejercicios-pascal
ejercicios-pascal
 
Fundamentos de programación.pptx
Fundamentos de programación.pptxFundamentos de programación.pptx
Fundamentos de programación.pptx
 
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
Ppiosprogramacion 090925153826-phpapp01[1]Principios de Programación
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
PHP MySql - FIEI - UNFV Clase03
PHP MySql - FIEI - UNFV Clase03PHP MySql - FIEI - UNFV Clase03
PHP MySql - FIEI - UNFV Clase03
 
Estructuras de seleccion
Estructuras de seleccionEstructuras de seleccion
Estructuras de seleccion
 
Trabajo final programacion
Trabajo final programacionTrabajo final programacion
Trabajo final programacion
 
Guia didactica programacion estructurada unidad 4
Guia didactica programacion estructurada unidad 4Guia didactica programacion estructurada unidad 4
Guia didactica programacion estructurada unidad 4
 
Pseudocódigo apunte segun sea y subrutinas
Pseudocódigo apunte segun sea y subrutinasPseudocódigo apunte segun sea y subrutinas
Pseudocódigo apunte segun sea y subrutinas
 
Visual Basic
Visual BasicVisual Basic
Visual Basic
 

Replica

  • 1. REPLICACIÓN DE BASE DE DATOS ORACLE 10G EXPRESS EDITION AUTORES: FERNANDO JARAMILLO DIEGO ESPARZA PATRICIA LEMA
  • 2. 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
  • 3. 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
  • 4. 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');
  • 5. 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;
  • 6. Ingresamos a la línea de comandos SQL Express Edition en el cliente y ponemos: connect hr/hr password: hr connect hr@10.1.1.2 // 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 hr@10.1.1.1 // ip del cliente LISTO !!!
  • 8. 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;
  • 9. 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;
  • 10. HACIENDO USO DEL BUCLE FOR  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;
  • 11. HACIENDO USO DEL BUCLE DOBLE 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;
  • 12. HACIENDO USO DEL BUCLE IF  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;
  • 13. MEDIA DE 2 NÚMEROS  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;
  • 14. IDENTIFICADOR DE PROFESORES  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;
  • 15. CONVERSION DE TIEMPO  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;
  • 16. UTILIZACIÓN DEL CURSOR  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;
  • 17. UTILIZACIÓN DEL CURSOR 2  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;
  • 18. CORREO  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;
  • 19. CURSORES  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;
  • 20. 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;
  • 21. CREACIÓN DE PAQUETES CREATE OR REPLACE PACKAGE PAQUETE1 IS PROCEDURE PROC01; PROCEDURE PROC02; END PAQUETE1;
  • 22. CUERPO DEL PAQUETE 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;
  • 23. CREACIÓN DE UN TRIGGER  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; ------->
  • 24. 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;
  • 25. CREAR PROCEDIMIENTO EJEMPLO 1 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;
  • 26. CREAR PROCEDIMIENTO EJEMPLO 2  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;
  • 27. CREAR PROCEDIMIENTO EJEMPLO 3  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;
  • 28. CREAR PROCEDIMIENTO EJEMPLO 4  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;
  • 29. CREAR PROCEDIMIENTO EJEMPLO 5  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;
  • 30. CREAR PROCEDIMIENTO EJEMPLO 6  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; --------
  • 31. 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;
  • 32. 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; -------
  • 33. CREAR PROCEDIMIENTO EJEMPLO 7 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;
  • 34. CREAR PROCEDIMIENTO EJEMPLO 8 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 -------
  • 35. 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;
  • 36. CREAR PROCEDIMIENTO EJEMPLO 9  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;
  • 37. CREAR PROCEDIMIENTO EJEMPLO 10  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;