Sistemas de Base de Datos



              CAPÍTULO V

        ARQUITECTURA CLIENTE
              SERVIDOR




                      DAI - Ing. Arturo Rozas Huacho   1
Sistemas de Base de Datos

5.1.- Arquitectura Cliente/Servidor




                    TCP/IP
                    TCP/IP                             BASE DE
                                                        DATOS




                      DAI - Ing. Arturo Rozas Huacho         2
Sistemas de Base de Datos

5.1.- Arquitectura Cliente/Servidor…
 Servidores
 •   Servidores de archivos
     Compartir documentos, imágenes, planos de
     ingeniería y otros objetos de grandes
     dimensiones.
 •   Servidores de bases de datos
     Intercambio de mensajes Solicitud/Respuesta
     mediante instrucciones SQL.
 •   Servidores de transacciones
     El cliente invoca procedimientos remotos que
     residen en el servidor. Los enunciados de SQL
     aciertan o fallan todos como una sola unidad.
     (OLAP: Online Transaction Processing)

                      DAI - Ing. Arturo Rozas Huacho   3
Sistemas de Base de Datos

5.1.- Arquitectura Cliente/Servidor…
 Servidores
 •Servidores de groupware




                      DAI - Ing. Arturo Rozas Huacho   4
Sistemas de Base de Datos

5.1.- Arquitectura Cliente/Servidor
 Elementos de Construcción de Cliente/Servidor




                                                      e
                                               w ar
                                       l   e
                                i   dd
                            M
     Cliente
                                                          Servidor




                      DAI - Ing. Arturo Rozas Huacho                 5
Sistemas de Base de Datos

5.1.- Arquitectura Cliente/Servidor…
 Servidor
  • Espera las solicitudes de los clientes

  • Ejecuta muchas solicitudes al mismo
    tiempo

  • Atiende primero a los clientes VIP
    (very important person)

  • Emprende y opera actividades de tareas en
    segundo plano

  • Se mantiene ejecutándose
    permanentemente
                      DAI - Ing. Arturo Rozas Huacho   6
Sistemas de Base de Datos

5.1.- Arquitectura Cliente/Servidor…
 ¿Qué es middleware?


  Es un término vago que abarca a todo
  el software distribuido necesario para
  el soporte de interacciones entre
  clientes y servidores.

  Es el enlace que permite que un
  cliente obtenga un servicio de un
  servidor.


                      DAI - Ing. Arturo Rozas Huacho   7
Sistemas de Base de Datos
 5.2.- Servicios de Base de Datos
   Los servicios de BD se almacenan en la base de datos y pueden ser
   funciones y procedimientos.



Aplicación


                  Solicitud Servicios (SQL)
Aplicación                                                       BASE DE
                                                                  DATOS
                               Datos

                                                             Servicio      1
 Aplicación                                                  Servicio      2
                                                  Servidor   …
                                                             Servicio      n

       Clientes
                            DAI - Ing. Arturo Rozas Huacho                     8
Sistemas de Base de Datos

5.2.- Servicios de BD
    Los servicios de BD pueden ser de tipo función
     o de tipo procedimiento (stored procedure)
    Son un grupo de sentencias SQL que es
     compilado una vez, y luego puede ser ejecutado
     muchas veces.
    Las funciones y los procedimientos
     almacenados se almacenan en la base de datos
     y constituyen los servicios que ofrece la base
     de datos (Cliente/Servidor).
    Las funciones y los procedimientos
     almacenados cuando se ejecutan no tienen que
     ser recompilados cada vez, este hecho hace
     que sean muy eficientes.

                      DAI - Ing. Arturo Rozas Huacho   9
Sistemas de Base de Datos

5.3.- Funciones Definidas por el Usuario
Se tienen tres tipos:
       Escalares: Retornan un tipo de los datos
        como int, money, varchar, real, etc. Pueden
        ser utilizadas dentro de sentencias SQL .

       De tabla en Linea: Retornan la salida de una
        simple declaración SELECT. La salida se
        puede utilizar dentro de composiciones o
        consultas como si fuera una tabla de
        estándar.

       De multisentencia: Dan como resultado una
        tabla, puede estar constituido por varias
        sentencias SQL, y puede llamar a otras
        funciones. La salida también se puede
        utilizar en operaciones de tabla.
                      DAI - Ing. Arturo Rozas Huacho   10
5.3.- Funciones Definidas
Sistemas de Base de Datos                      por el
Usuario…
Funciones escalares:
/* ********************************************
    Function que convierte una nota de tipo texto a número
    ********************************************* */
CREATE FUNCTION fnNota (@NotaTexto varchar(3))
RETURNS int
AS
BEGIN
   declare @Nota int;
   set @Nota = case
                 when @NotaTexto = 'NSP' then 0
                 else Cast(@NotaTexto as int)
               end;
   return(@Nota);
END




                       DAI - Ing. Arturo Rozas Huacho        11
5.3.- Funciones Definidas
Sistemas de Base de Datos                         por el
Usuario…
Funciones escalares:
/* *********************************************
    Function que convierte una nota a número
    ********************************************** */
CREATE FUNCTION fnRecuperarNota (@Semestre varchar(7),
                                  @Cod_Asignatura varchar(5),
                                  @Cod_Alumno varchar(6))
RETURNS int
AS
BEGIN
  declare @Nota int;
  select @Nota = dbo.fnNota(Nota)
     from MATRICULA
     where (Semestre = @Semestre) and
           (Cod_Asignatura = @Cod_Asignatura) and
           (Cod_Alumno = @Cod_Alumno)
  return(@Nota)
END




                          DAI - Ing. Arturo Rozas Huacho        12
5.3.- Funciones Definidas
Sistemas de Base de Datos                        por el
Usuario…
Funciones de tabla en Línea:
/* *******************************************************
   Function que devuelve las asignaturas aprobadas
   ******************************************************* */
ALTER FUNCTION fnAsignaturasAprobadas(@Cod_CP varchar(2))
RETURNS TABLE
AS
  RETURN (SELECT M.Semestre, M.Cod_CP, M.Cod_Alumno,
   M.Cod_Asignatura,
                 A.Nombre_Asignatura, A.Creditos, A.Categoria,
                 Nota = dbo.fnNota(M.Nota)
            FROM MATRICULA M inner join ASIGNATURA A
              ON (M.Cod_Asignatura = A.Cod_Asignatura) and
                 (M.Cod_CP = A.Cod_CP)
            WHERE ((M.Cod_CP = @Cod_CP) or (@Cod_Cp = '*')) and
                  (dbo.fnNota(M.Nota) > 10))




                         DAI - Ing. Arturo Rozas Huacho           13
5.3.- Funciones Definidas
Sistemas de Base de Datos               por el
Usuario…
Funciones de multisentencia:
/




                DAI - Ing. Arturo Rozas Huacho   14
5.3.- Funciones Definidas
Sistemas de Base de Datos                        por el
Usuario…
Funciones de multisentencia:
 -- Recuperar información a la tabla temporal
  insert into @taCreditosAcumulados
  select Semestre, Cod_Alumno, sum(Creditos), sum(Creditos)
    from dbo.fnAsignaturasAprobadas(@Cod_CP)
    group by Semestre, Cod_Alumno
    order by Cod_Alumno, Semestre

 -- Acumular los creditos por semestre
    -- Declarar e inicializar variables
    declare @Cod_Alumno varchar(6),
            @Creditos_Acum int;
    set @Cod_Alumno = '';
    set @Creditos_Acum = 0;




                         DAI - Ing. Arturo Rozas Huacho       15
5.3.- Funciones Definidas
Sistemas de Base de Datos                        por el
Usuario…
Funciones de multisentencia:
 -- Acumular creditos
     update @taCreditosAcumulados
       set @Creditos_Acum = Creditos_Acum = case
                                              when @Cod_Alumno <>
   Cod_Alumno then Creditos
                                              else @Creditos_Acum +
   Creditos
                                            end,
            @Cod_Alumno = Cod_Alumno;

   -- Devolver resultado
   INSERT INTO @taCreditosAcumuladosSemestre
   SELECT C.Semestre, A.Cod_Alumno, A.Paterno, A.Materno, A.Nombres,
          A.Cod_CP, C.Creditos, C.Creditos_Acum
     from @taCreditosAcumulados C inner join ALUMNO A
       ON C.Cod_Alumno = A.Cod_Alumno
   RETURN
END




                         DAI - Ing. Arturo Rozas Huacho          16
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
    Se escriben utilizando el lenguaje de
     programación de la base de Datos. Permiten
     declaración de variables, sentencias de
     asignación, estructuras selectivas y repetitivas.
    Aceptan parámetros de entrada y salida
    Pueden retornar conjunto de datos así como
     también un solo valor.
    Permiten la programación modular y puede
     hacer referencia a otros procedimientos
     almacenados, con lo que se puede simplificar
     una serie de instrucciones complejas.
    Pueden ser ejecutados desde otros
     procedimientos almacenados, vistas,
     disparadores y consultas en general.
                      DAI - Ing. Arturo Rozas Huacho   17
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…

  Sintaxis :

  CREATE PROCEDURE nombre procedimiento
                    @parametros tipo de dato [= valor],
                    @parametros_salida tipo de dato OUTPUT
  AS
      [DECLARE @Variables tipos]
  BEGIN
       sentencias sql
  END




                       DAI - Ing. Arturo Rozas Huacho        18
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
  Escribir procedimientos almacenados
         Escribir un procedimiento para determinar la
  relación de alumnos de una determinada carrera
 CREATE PROCEDURE sp_AlumnosPorCarrera
                   @Cod_Carrera varchar(2)
 AS
 BEGIN
    -- Seleccionar alumnos de la carrera indicada
    SELECT *
      FROM ALUMNO
      WHERE Cod_Carrera = @Cod_Carrera
 END

         Constituye el código fuente, se debe almacenar
  como un archivo de extensión SQL.
         Este código se debe compilar y almacenar en la
  base de datos, para que pueda ser invocado como un
  servicio.
                       DAI - Ing. Arturo Rozas Huacho     19
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…

  Ejecución de un procedimiento.
  Sintaxis :

[DECLARE @variables tipo de variable]
EXEC/EXECUTE nombre_procedimiento [@parametros], [@variables]




 Ejemplo de ejecución:

  exec sp_AlumnosPorCarrera ‘IN’




                        DAI - Ing. Arturo Rozas Huacho          20
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
  Ejercicios:
  Dadas las siguientes tablas

Comunidad( CodComunidad, Nombre )

Prestatario( CodPrestatario, Nombres, Sexo, EstadoCivil,
DocIdentidad,
               CodComunidad)

Oficial_Credito( CodOficial, Nombres, Email )

Prestamo( DocPrestamo, FechaPrestamo, Importe,
FechaVencimiento,
            CodPrestatario, CodOficial )

Amortizacion( DocCancelacion, FechaCancelacion, Importe,
                DocPrestamo)

                          DAI - Ing. Arturo Rozas Huacho   21
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
Ejercicios (Problema 1)
Determinar la relacion de Comunidades, con los saldos de
los prestamos pertenecientes a la comunidad.
R(CodComunidad, Nombre, Saldo)
 create procedure spu_Saldo_Comunidad @CodComunidad varchar(12)
 as
 begin
    -- Determinar los montos cancelados por cada documento
    select DocPrestamo, sum(Importe) MontoCancelado
      into #Montos_Cancelados
      from Amortizacion
      group by DocPrestamo

   -- Determinar los saldos de cada Prestamo
   select P.DocPrestamo, P.CodPrestatario,
         (P.Importe - IsNull(M.MontoCancelado,0)) Saldo
     into #Saldos_Prestamos
     from Prestamo P left outer join #Montos_Cancelados M
       on P.DocPrestamo = M.DocPrestamo

                         DAI - Ing. Arturo Rozas Huacho           22
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
Ejercicios (Problema 1 …)

  -- Determinar los saldos de cada prestatario de la comunidad
  -- especificada
   select S.CodPrestatario, sum(S.Saldo) Saldo, P.CodComunidad

     into #Saldos_Prestatario
     from #Saldos_Prestamos S, Prestatario P
     where (S.CodPrestatario = P.CodPrestatario) and
           (P.CodComunidad = @CodComunidad)
     group by S.CodPrestatario, P.CodComunidad

   -- Determinar los saldos de cada comunidad
   select S.CodComunidad, C.Nombre, sum(S.Saldo) Saldo
     from #Saldos_Prestatario S, Comunidad C
     where S.CodComunidad = C.CodComunidad
     group by S.CodComunidad, C.Nombre

 end;


                         DAI - Ing. Arturo Rozas Huacho          23
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
Ejercicios (Problema 2)

Escribir un procedimiento almacenado que obtenga los
movimientos para un determinado prestatario, considerando los
saldos por préstamo y los saldos por prestatario. El
procedimiento debe mostrar la relación de todos los préstamos
del prestatario y para cada préstamo sus respectivas
cancelaciones, tal como se ilustra en el ejemplo siguiente:


R(FechaMov,DocPrestamo,DocCancelacion,Debe,Haber,SaldoPrestamo,SaldoTotal)
  02/02/06 PA-101                     1000                1000       1000
  31/03/06             RC-421                200           800        800
  30/04/06             RC-467                300           500        500
  15/04/06 PA-246                     1600                1600       2100
  30/04/06             RC-478                700           900       1400
  31/05/06             RC-523                900             0        500
  ...




                              DAI - Ing. Arturo Rozas Huacho                 24
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)

 create procedure sp_Prestatario_Rural_Movimientos
                   @CodPrestatario varchar(15)
 as
 begin
    -- Crear tabla vacia de movimientos
    create table #Movimientos
    (
       Fecha_Mov                DateTime,
       DocPrestamo              varchar(15),
       DocCancelacion    varchar(15),
       Debe                     numeric(15,2),
       Haber                    numeric(15,2),
       SaldoPrestamo            numeric(15,2),
       SaldoTotal               numeric(15,2)
    )




                         DAI - Ing. Arturo Rozas Huacho   25
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
  -- Recuperar Prestamos y cancelaciones de movimientos
     -- Declarar variables utilizadas por el cursor
     declare @DocPrestamo varchar(15), @FechaPrestamo DateTime,
             @ImportePrestamo numeric(15,2),
             @SaldoPrestamo numeric(15,2),
             @SaldoTotal numeric(15,2);
     -- Inicializar saldo
     set @SaldoPrestamo = 0;
     set @SaldoTotal = 0;
     -- Declarar el cursor
     declare cursor_Prestamo cursor
     for
     select DocPrestamo, FechaPrestamo, ImportePrestamo
       from Prestamo
       where CodPrestatario = @CodPrestatario;
     -- Abrir el cursor
     open cursor_Prestamo;



                         DAI - Ing. Arturo Rozas Huacho           26
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
  -- Activar la primera fila del cursor
     fetch next from cursor_Prestamo
     into @DocPrestamo, @FechaPrestamo, @ImportePrestamo
     -- Procesar cada fila repetitivamente
     while @@FETCH_STATUS = 0
     begin
       -- Inicializar saldo prestamo
       set @SaldoPrestamo = @ImportePrestamo;
       -- Actualizar saldo total
       set @SaldoTotal = @SaldoTotal + @ImportePrestamo;
       -- Insertar prestamo en tabla de movimientos
       insert into #Movimientos
                   values(@FechaPrestamo,@DocPrestamo,'',
                          @ImportePrestamo,0,@SaldoPrestamo,
                          @SaldoTotal)
       -- Procesar cancelaciones del prestamo
       declare @DocCancelacion varchar(15),
               @FechaCancelacion DateTime,
               @ImporteCancelacion numeric(15,2);


                         DAI - Ing. Arturo Rozas Huacho        27
Sistemas de Base de Datos

5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
  -- Declarar el cursor anidado
       declare cursor_Cancelacion cursor
       for
       select DocCancelacion, FechaCancelacion, ImporteCancelacion
         from Cancelacion
         where DocPrestamo = @DocPrestamo;
       -- Abrir el cursor
       open cursor_Cancelacion;
       -- Activar la primera fila del cursor
       fetch next from cursor_Cancelacion
       into @DocCancelacion, @FechaCancelacion, @ImporteCancelacion
       -- Procesar cada fila repetitivamente
       while @@FETCH_STATUS = 0
       begin
         -- Actualizar saldos
         set @SaldoPrestamo = @SaldoPrestamo - @ImporteCancelacion;
         set @SaldoTotal = @SaldoTotal - @ImporteCancelacion;




                         DAI - Ing. Arturo Rozas Huacho          28
Sistemas de Base de Datos
5.4- Procedimientos Almacenados…
Ejercicios (Problema 2 …)
 -- Insertar prestamo en tabla de movimientos
         insert into #Movimientos
             values(@FechaCancelacion,'',@DocCancelacion, 0,
                     @ImportePrestamo, @SaldoPrestamo, @SaldoTotal)
         -- Siguiente registro
         fetch next from cursor_Cancelacion
         into @DocCancelacion, @FechaCancelacion, @ImporteCancelacion
       end; -- while
       -- Cerrar Cursor
       close cursor_Cancelacion;
       deallocate cursor_Cancelacion;
       -- Siguiente registro de prestamo
       fetch next from cursor_Prestamo
       into @DocPrestamo, @FechaPrestamo, @ImportePrestamo
     end; -- while
     -- Cerrar Cursor
     close cursor_Prestamo;
     deallocate cursor_Prestamo;
  -- Mostrar Movimientos
  select *
     from #Movimientos
end;

                             DAI - Ing. Arturo Rozas Huacho             29

Arquitectura cliente servidor

  • 1.
    Sistemas de Basede Datos CAPÍTULO V ARQUITECTURA CLIENTE SERVIDOR DAI - Ing. Arturo Rozas Huacho 1
  • 2.
    Sistemas de Basede Datos 5.1.- Arquitectura Cliente/Servidor TCP/IP TCP/IP BASE DE DATOS DAI - Ing. Arturo Rozas Huacho 2
  • 3.
    Sistemas de Basede Datos 5.1.- Arquitectura Cliente/Servidor… Servidores • Servidores de archivos Compartir documentos, imágenes, planos de ingeniería y otros objetos de grandes dimensiones. • Servidores de bases de datos Intercambio de mensajes Solicitud/Respuesta mediante instrucciones SQL. • Servidores de transacciones El cliente invoca procedimientos remotos que residen en el servidor. Los enunciados de SQL aciertan o fallan todos como una sola unidad. (OLAP: Online Transaction Processing) DAI - Ing. Arturo Rozas Huacho 3
  • 4.
    Sistemas de Basede Datos 5.1.- Arquitectura Cliente/Servidor… Servidores •Servidores de groupware DAI - Ing. Arturo Rozas Huacho 4
  • 5.
    Sistemas de Basede Datos 5.1.- Arquitectura Cliente/Servidor Elementos de Construcción de Cliente/Servidor e w ar l e i dd M Cliente Servidor DAI - Ing. Arturo Rozas Huacho 5
  • 6.
    Sistemas de Basede Datos 5.1.- Arquitectura Cliente/Servidor… Servidor • Espera las solicitudes de los clientes • Ejecuta muchas solicitudes al mismo tiempo • Atiende primero a los clientes VIP (very important person) • Emprende y opera actividades de tareas en segundo plano • Se mantiene ejecutándose permanentemente DAI - Ing. Arturo Rozas Huacho 6
  • 7.
    Sistemas de Basede Datos 5.1.- Arquitectura Cliente/Servidor… ¿Qué es middleware? Es un término vago que abarca a todo el software distribuido necesario para el soporte de interacciones entre clientes y servidores. Es el enlace que permite que un cliente obtenga un servicio de un servidor. DAI - Ing. Arturo Rozas Huacho 7
  • 8.
    Sistemas de Basede Datos 5.2.- Servicios de Base de Datos Los servicios de BD se almacenan en la base de datos y pueden ser funciones y procedimientos. Aplicación Solicitud Servicios (SQL) Aplicación BASE DE DATOS Datos Servicio 1 Aplicación Servicio 2 Servidor … Servicio n Clientes DAI - Ing. Arturo Rozas Huacho 8
  • 9.
    Sistemas de Basede Datos 5.2.- Servicios de BD  Los servicios de BD pueden ser de tipo función o de tipo procedimiento (stored procedure)  Son un grupo de sentencias SQL que es compilado una vez, y luego puede ser ejecutado muchas veces.  Las funciones y los procedimientos almacenados se almacenan en la base de datos y constituyen los servicios que ofrece la base de datos (Cliente/Servidor).  Las funciones y los procedimientos almacenados cuando se ejecutan no tienen que ser recompilados cada vez, este hecho hace que sean muy eficientes. DAI - Ing. Arturo Rozas Huacho 9
  • 10.
    Sistemas de Basede Datos 5.3.- Funciones Definidas por el Usuario Se tienen tres tipos:  Escalares: Retornan un tipo de los datos como int, money, varchar, real, etc. Pueden ser utilizadas dentro de sentencias SQL .  De tabla en Linea: Retornan la salida de una simple declaración SELECT. La salida se puede utilizar dentro de composiciones o consultas como si fuera una tabla de estándar.  De multisentencia: Dan como resultado una tabla, puede estar constituido por varias sentencias SQL, y puede llamar a otras funciones. La salida también se puede utilizar en operaciones de tabla. DAI - Ing. Arturo Rozas Huacho 10
  • 11.
    5.3.- Funciones Definidas Sistemasde Base de Datos por el Usuario… Funciones escalares: /* ******************************************** Function que convierte una nota de tipo texto a número ********************************************* */ CREATE FUNCTION fnNota (@NotaTexto varchar(3)) RETURNS int AS BEGIN declare @Nota int; set @Nota = case when @NotaTexto = 'NSP' then 0 else Cast(@NotaTexto as int) end; return(@Nota); END DAI - Ing. Arturo Rozas Huacho 11
  • 12.
    5.3.- Funciones Definidas Sistemasde Base de Datos por el Usuario… Funciones escalares: /* ********************************************* Function que convierte una nota a número ********************************************** */ CREATE FUNCTION fnRecuperarNota (@Semestre varchar(7), @Cod_Asignatura varchar(5), @Cod_Alumno varchar(6)) RETURNS int AS BEGIN declare @Nota int; select @Nota = dbo.fnNota(Nota) from MATRICULA where (Semestre = @Semestre) and (Cod_Asignatura = @Cod_Asignatura) and (Cod_Alumno = @Cod_Alumno) return(@Nota) END DAI - Ing. Arturo Rozas Huacho 12
  • 13.
    5.3.- Funciones Definidas Sistemasde Base de Datos por el Usuario… Funciones de tabla en Línea: /* ******************************************************* Function que devuelve las asignaturas aprobadas ******************************************************* */ ALTER FUNCTION fnAsignaturasAprobadas(@Cod_CP varchar(2)) RETURNS TABLE AS RETURN (SELECT M.Semestre, M.Cod_CP, M.Cod_Alumno, M.Cod_Asignatura, A.Nombre_Asignatura, A.Creditos, A.Categoria, Nota = dbo.fnNota(M.Nota) FROM MATRICULA M inner join ASIGNATURA A ON (M.Cod_Asignatura = A.Cod_Asignatura) and (M.Cod_CP = A.Cod_CP) WHERE ((M.Cod_CP = @Cod_CP) or (@Cod_Cp = '*')) and (dbo.fnNota(M.Nota) > 10)) DAI - Ing. Arturo Rozas Huacho 13
  • 14.
    5.3.- Funciones Definidas Sistemasde Base de Datos por el Usuario… Funciones de multisentencia: / DAI - Ing. Arturo Rozas Huacho 14
  • 15.
    5.3.- Funciones Definidas Sistemasde Base de Datos por el Usuario… Funciones de multisentencia: -- Recuperar información a la tabla temporal insert into @taCreditosAcumulados select Semestre, Cod_Alumno, sum(Creditos), sum(Creditos) from dbo.fnAsignaturasAprobadas(@Cod_CP) group by Semestre, Cod_Alumno order by Cod_Alumno, Semestre -- Acumular los creditos por semestre -- Declarar e inicializar variables declare @Cod_Alumno varchar(6), @Creditos_Acum int; set @Cod_Alumno = ''; set @Creditos_Acum = 0; DAI - Ing. Arturo Rozas Huacho 15
  • 16.
    5.3.- Funciones Definidas Sistemasde Base de Datos por el Usuario… Funciones de multisentencia: -- Acumular creditos update @taCreditosAcumulados set @Creditos_Acum = Creditos_Acum = case when @Cod_Alumno <> Cod_Alumno then Creditos else @Creditos_Acum + Creditos end, @Cod_Alumno = Cod_Alumno; -- Devolver resultado INSERT INTO @taCreditosAcumuladosSemestre SELECT C.Semestre, A.Cod_Alumno, A.Paterno, A.Materno, A.Nombres, A.Cod_CP, C.Creditos, C.Creditos_Acum from @taCreditosAcumulados C inner join ALUMNO A ON C.Cod_Alumno = A.Cod_Alumno RETURN END DAI - Ing. Arturo Rozas Huacho 16
  • 17.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados…  Se escriben utilizando el lenguaje de programación de la base de Datos. Permiten declaración de variables, sentencias de asignación, estructuras selectivas y repetitivas.  Aceptan parámetros de entrada y salida  Pueden retornar conjunto de datos así como también un solo valor.  Permiten la programación modular y puede hacer referencia a otros procedimientos almacenados, con lo que se puede simplificar una serie de instrucciones complejas.  Pueden ser ejecutados desde otros procedimientos almacenados, vistas, disparadores y consultas en general. DAI - Ing. Arturo Rozas Huacho 17
  • 18.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Sintaxis : CREATE PROCEDURE nombre procedimiento @parametros tipo de dato [= valor], @parametros_salida tipo de dato OUTPUT AS [DECLARE @Variables tipos] BEGIN sentencias sql END DAI - Ing. Arturo Rozas Huacho 18
  • 19.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Escribir procedimientos almacenados Escribir un procedimiento para determinar la relación de alumnos de una determinada carrera CREATE PROCEDURE sp_AlumnosPorCarrera @Cod_Carrera varchar(2) AS BEGIN -- Seleccionar alumnos de la carrera indicada SELECT * FROM ALUMNO WHERE Cod_Carrera = @Cod_Carrera END Constituye el código fuente, se debe almacenar como un archivo de extensión SQL. Este código se debe compilar y almacenar en la base de datos, para que pueda ser invocado como un servicio. DAI - Ing. Arturo Rozas Huacho 19
  • 20.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejecución de un procedimiento. Sintaxis : [DECLARE @variables tipo de variable] EXEC/EXECUTE nombre_procedimiento [@parametros], [@variables] Ejemplo de ejecución: exec sp_AlumnosPorCarrera ‘IN’ DAI - Ing. Arturo Rozas Huacho 20
  • 21.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios: Dadas las siguientes tablas Comunidad( CodComunidad, Nombre ) Prestatario( CodPrestatario, Nombres, Sexo, EstadoCivil, DocIdentidad, CodComunidad) Oficial_Credito( CodOficial, Nombres, Email ) Prestamo( DocPrestamo, FechaPrestamo, Importe, FechaVencimiento, CodPrestatario, CodOficial ) Amortizacion( DocCancelacion, FechaCancelacion, Importe, DocPrestamo) DAI - Ing. Arturo Rozas Huacho 21
  • 22.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios (Problema 1) Determinar la relacion de Comunidades, con los saldos de los prestamos pertenecientes a la comunidad. R(CodComunidad, Nombre, Saldo) create procedure spu_Saldo_Comunidad @CodComunidad varchar(12) as begin -- Determinar los montos cancelados por cada documento select DocPrestamo, sum(Importe) MontoCancelado into #Montos_Cancelados from Amortizacion group by DocPrestamo -- Determinar los saldos de cada Prestamo select P.DocPrestamo, P.CodPrestatario, (P.Importe - IsNull(M.MontoCancelado,0)) Saldo into #Saldos_Prestamos from Prestamo P left outer join #Montos_Cancelados M on P.DocPrestamo = M.DocPrestamo DAI - Ing. Arturo Rozas Huacho 22
  • 23.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios (Problema 1 …) -- Determinar los saldos de cada prestatario de la comunidad -- especificada select S.CodPrestatario, sum(S.Saldo) Saldo, P.CodComunidad into #Saldos_Prestatario from #Saldos_Prestamos S, Prestatario P where (S.CodPrestatario = P.CodPrestatario) and (P.CodComunidad = @CodComunidad) group by S.CodPrestatario, P.CodComunidad -- Determinar los saldos de cada comunidad select S.CodComunidad, C.Nombre, sum(S.Saldo) Saldo from #Saldos_Prestatario S, Comunidad C where S.CodComunidad = C.CodComunidad group by S.CodComunidad, C.Nombre end; DAI - Ing. Arturo Rozas Huacho 23
  • 24.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios (Problema 2) Escribir un procedimiento almacenado que obtenga los movimientos para un determinado prestatario, considerando los saldos por préstamo y los saldos por prestatario. El procedimiento debe mostrar la relación de todos los préstamos del prestatario y para cada préstamo sus respectivas cancelaciones, tal como se ilustra en el ejemplo siguiente: R(FechaMov,DocPrestamo,DocCancelacion,Debe,Haber,SaldoPrestamo,SaldoTotal) 02/02/06 PA-101 1000 1000 1000 31/03/06 RC-421 200 800 800 30/04/06 RC-467 300 500 500 15/04/06 PA-246 1600 1600 2100 30/04/06 RC-478 700 900 1400 31/05/06 RC-523 900 0 500 ... DAI - Ing. Arturo Rozas Huacho 24
  • 25.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios (Problema 2 …) create procedure sp_Prestatario_Rural_Movimientos @CodPrestatario varchar(15) as begin -- Crear tabla vacia de movimientos create table #Movimientos ( Fecha_Mov DateTime, DocPrestamo varchar(15), DocCancelacion varchar(15), Debe numeric(15,2), Haber numeric(15,2), SaldoPrestamo numeric(15,2), SaldoTotal numeric(15,2) ) DAI - Ing. Arturo Rozas Huacho 25
  • 26.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios (Problema 2 …) -- Recuperar Prestamos y cancelaciones de movimientos -- Declarar variables utilizadas por el cursor declare @DocPrestamo varchar(15), @FechaPrestamo DateTime, @ImportePrestamo numeric(15,2), @SaldoPrestamo numeric(15,2), @SaldoTotal numeric(15,2); -- Inicializar saldo set @SaldoPrestamo = 0; set @SaldoTotal = 0; -- Declarar el cursor declare cursor_Prestamo cursor for select DocPrestamo, FechaPrestamo, ImportePrestamo from Prestamo where CodPrestatario = @CodPrestatario; -- Abrir el cursor open cursor_Prestamo; DAI - Ing. Arturo Rozas Huacho 26
  • 27.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios (Problema 2 …) -- Activar la primera fila del cursor fetch next from cursor_Prestamo into @DocPrestamo, @FechaPrestamo, @ImportePrestamo -- Procesar cada fila repetitivamente while @@FETCH_STATUS = 0 begin -- Inicializar saldo prestamo set @SaldoPrestamo = @ImportePrestamo; -- Actualizar saldo total set @SaldoTotal = @SaldoTotal + @ImportePrestamo; -- Insertar prestamo en tabla de movimientos insert into #Movimientos values(@FechaPrestamo,@DocPrestamo,'', @ImportePrestamo,0,@SaldoPrestamo, @SaldoTotal) -- Procesar cancelaciones del prestamo declare @DocCancelacion varchar(15), @FechaCancelacion DateTime, @ImporteCancelacion numeric(15,2); DAI - Ing. Arturo Rozas Huacho 27
  • 28.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios (Problema 2 …) -- Declarar el cursor anidado declare cursor_Cancelacion cursor for select DocCancelacion, FechaCancelacion, ImporteCancelacion from Cancelacion where DocPrestamo = @DocPrestamo; -- Abrir el cursor open cursor_Cancelacion; -- Activar la primera fila del cursor fetch next from cursor_Cancelacion into @DocCancelacion, @FechaCancelacion, @ImporteCancelacion -- Procesar cada fila repetitivamente while @@FETCH_STATUS = 0 begin -- Actualizar saldos set @SaldoPrestamo = @SaldoPrestamo - @ImporteCancelacion; set @SaldoTotal = @SaldoTotal - @ImporteCancelacion; DAI - Ing. Arturo Rozas Huacho 28
  • 29.
    Sistemas de Basede Datos 5.4- Procedimientos Almacenados… Ejercicios (Problema 2 …) -- Insertar prestamo en tabla de movimientos insert into #Movimientos values(@FechaCancelacion,'',@DocCancelacion, 0, @ImportePrestamo, @SaldoPrestamo, @SaldoTotal) -- Siguiente registro fetch next from cursor_Cancelacion into @DocCancelacion, @FechaCancelacion, @ImporteCancelacion end; -- while -- Cerrar Cursor close cursor_Cancelacion; deallocate cursor_Cancelacion; -- Siguiente registro de prestamo fetch next from cursor_Prestamo into @DocPrestamo, @FechaPrestamo, @ImportePrestamo end; -- while -- Cerrar Cursor close cursor_Prestamo; deallocate cursor_Prestamo; -- Mostrar Movimientos select * from #Movimientos end; DAI - Ing. Arturo Rozas Huacho 29

Notas del editor

  • #2 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #3 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #4 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #5 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #6 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #7 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #8 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #9 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #10 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #11 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #12 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #13 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #14 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #15 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #16 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #17 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #18 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #19 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #20 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #21 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #22 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #23 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #24 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #25 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #26 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #27 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #28 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #29 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho
  • #30 ALGORITMICA II - Tipos Abstractos de Datos (TAD) DAI - Ing. Arturo Rozas Huacho