Upload
erick-orellana-palacios
View
15
Download
0
Embed Size (px)
Citation preview
1
ProgramaciónSQL
Lucio SalgadoDiciembre 2008
2
Gestionadores de Bases de Datos (DBMS)
Es el software que permite administrar bases de datos, a través de ella el usuario puede usar los datos con mucha transparencia. En términos simples es una interfaz datos usuario.Los basados en el modelo relacional se denomina RDBMS
3
Tipos de RDBMS
De escritorioCaracterísticas
Para pocos usuariosProgramación en una sola capaDébil en:Concurrencia,TransaccionesRecuperaciónEj. Paradox, Dbase, MsAccess
4
RDBMS de escritorio
Aplicación
BDE/DAO
Base deDatos
Aplicación
BDE/DAO
5
Tipos de RDBMS
Basado en ServidorCaracterísticas
Para muchos usuariosProgramación en varias capasFuerte enConcurrenciaTransaccionesRecuperaciónEj. Oracle, MsSQL, Interbase, Informix, Sybase,DB/2, Btrieve. MySQL,Ingres
6
RDBMS basado en servidor
Aplicación
ClienteSQL
Aplicación
ClienteSQLServidor
SQL
Base deDatos
7
Potencialidades en Servidores SQL
Trabajo es más productivoConcurrencia, implementar transacciones atómicasConversación basada en el lenguaje SQLMantener Código en el servidorProcedimientos:
Conjuntos de instrucciones que se guardan en la base de datos. Evitan que los datos viajen
Triggers:Son también secuencia de instrucciones pero se activan en momentos especiales (UPDATE,INSERT,DELETE)
8
Criterios para evaluar un servidor SQL
Plataformas Soportadas.Soporte a tipos de datos.Lenguaje de triggers y procedimientos.Implementación de transacciones, recuperación y aislamiento.Segmentación.Replicación.Precio.
9
OracleAcepta varias plataformas, como Windows, Unix, Linux, etc.Permite funciones avanzadas.Segmentación y Replicación.Todos los tipos de datos.Extensión procedimental de le lenguaje PL/SQL que es completo y potente.Paquetes y tipos de datos abstractos.Definen Clases((ya un DBMS objeto relacional)Lenguaje de triggers completo.Alto costo, por licencia y sobre todo por mantenimiento (support). Producto muy estable
10
InterbaseAcepta muchas plataformasEl mantenimiento Simple. Aunque su entorno de administración deja mucho que desear.Cada base de datos se localiza en un archivo .gdbLas Copias de seguridad se pueden realizar en calienteAcepta todo tipo de datos y orientado a cumplir los estándares.El uso de Restricción de Integridad Referencial es completoTiene un Lenguaje de procedimientos completo.Acceso concurrente garantizado.
11
MS SQL ServerEntorno MS Windows
Win NT, WINxx, Windows XP, Windows 2003.Instalación y manejo sencillos.Mantenimiento avanzado algo complicadoNo copias de seguridad en vivoIntegridad referencial no muy sofisticado.Muy particular su lenguaje de procedimientos: Transact-SQLIntegración con otros productosLas últimas versiones MS SQL Server 7.0, MS SQL Server 2000, MS SQL Server 2005, son mucho más sofisticadas y estables.
12
Procedimientos Almacenados
Un procedimiento se puede entender como un algoritmo cuya definición reside en la base de datos y es ejecutado por el servidor del sistema, cuando algún usuario lo solicite.
13
Definición y ejecución de un Procedimiento-1
ORACLEPara crear:
Create or replace procedure <<nombre>>(<<parámetros>>)as<<CuerpodeProcedimiento>>Llamar procedimientos:execute <<nombre>> [(<<parámetros>>)]
14
Ejemplo-1CREATE OR REPLACE PROCEDURE clienteInsProc(
v_nit IN CHAR, v_nombre IN CHAR, v_direccion IN CHAR, v_telefono IN CHAR)
AS BEGIN
INSERT INTO cliente(nit, nombre, direccion, telefono) VALUES(v_nit, v_nombre, v_direccion, v_telefono);
END; /
15
Definición y ejecución de un Procedimiento-2
INTERBASEPara crear:create procedure <<nombre>>[(<<parametrosdeentrada>>)][returns (<<parametros de salida>>)]as <<Cuerpodeprocedimiento>>Llamar procedimientos:execute procedure <<nombre>> <<parametrosentradas>> returning_values<<parametrosdeSalida>>
16
Ejemplo-2SET TERM !! ;CREATE PROCEDURE clienteInsProc( v_ruc CHAR(10),
v_nombre CHAR(25),v_direccion CHAR(10),v_telefono CHAR(10))
ASBEGIN
INSERT INTO cliente(ruc,nombre, direccion, telefono)VALUES(:v_ruc,:v_nombre,:v_direccion,:v_telefono);
END;!!SET TERM ; !!
17
Definición y ejecución de un Procedimiento-3
MS SQL SERVERPara crearCreate procedure <<nombre>>(<<parametrosdeEntradaySalida>>)as<<cuerpodeprocedimiento>>Llamar procedimientos:exec nombre [parametros]
18
Ejemplo 3CREATE PROCEDURE clienteInsProc( @ruc char(10),
@nombre char(25) =NULL,@direccion char(10) =NULL,@telefono char(10) =NULL)
ASBEGININSERT INTO cliente(ruc,nombre,direccion, telefono)
VALUES(@ruc,@nombre,@direccion,@telefono)ENDgo
19
Ejecutando el procedimiento
MS SQL ServerEXEC clienteInsProc ’452341’, ’JOSE BUENDIA’, ’SUCRE #1435’, ’5243612’
20
Ejemplo 4
Actualiza la tabla historial (registro de materias aprobadas) con los datos de la tabla registro para algún estudiante en particular conocido su ci: Estudiante(ci,nom,dir,tel,ing,fechanac)Registro(ci,sigla,sem,nota)Materia(sigla,nom,creditos)Historial(ci,sigla,sem,nota)
21
Ejemplo 4 - código MS SQL Server
CREATE PROCEDURE act_hist (@cix CHAR(15))ASBEGIN
DELETE FROM historialWHERE ci=@cixINSERT INTO historial (ci,sigla,sem,nota)SELECT ci,sigla,sem,notaFROM registroWHERE ci=@cix AND nota >=51
END
22
Aspectos Complementariosde
Programación
23
Uso de variables o identificadores -1
ORACLELa declaración se hace así:declare <<nombrevar>> tipo
Ej.declare x numberdeclare nom char(20)
24
Uso de variables o identificadores -2
INTERBASEPara Declarar:declare variable <<nombrevar>> tipo
Ej.declare variable x char(10);declare variable y integer;
25
Uso de variables o identificadores -3
MS SQL SERVERAl igual que en los anteriores, excepto que el nombre siempre debe comenzar con el símbolo @:
declare <<nombrevar>> tipo
Ej.declare @x char(10);declare @y integer;
26
Asignaciones-1
ORACLEPara la Asignación se usa := <<Variable>>:=<<Expresión>>Ej.
x:=x+1y:= y*2 +x
27
Asignaciones-2
INTERBASELa asignación es algo muy simpleVariable=ExpresionEjemplo.y=y+1;x=’2340’;
28
Asignaciones-3
MS SQL SERVERUna asignación se ve algo distintoselect <<Variable>>=<<Expresión>>Ej.select @y=@y+1;select @x=‘2340’;
29
Estructuras de Control-1
ORACLECondicionalesif (<<condicion>>) then
<<instruccion1>>[else
<< instruccion2>>]Cicloswhile (<<Condicion>>) loop<<instrucción>>
end loop
30
Estructuras de Control-2
INTERBASECondicionalesif (<<condicion>>) then <<instruccion1>>[else <<instruccion2>>]Cicloswhile (<<condicion>>) do<<instrucción>>
31
Estructuras de Control-3Condicionalesif (<<condicion>>) << instruccion1>>
[else<< instruccion2>>]
select case when <<condicion1>> then <<valor1Mostrar>>…when <<condicionN>> then <<valorNMostrar>>
endCicloswhile (<<Condicion>>) do<<instrucción>>
32
Un poco de códigoMS SQL Server
DECLARE @x INTSET @x=2SELECT @x=@x+4SELECT @xIF @x>5
SELECT 'mayor a 5'SELECT CASE
WHEN @x>5 THEN 'cinco'WHEN @x<10 THEN 'diez'
ENDWHILE (@x<20)BEGIN
SET @x=@x+1SELECT @x
END
33
Cursores
Un cursor es una variable de “tipo tabla”, concretamente puede entenderse como un conjunto de registros. pasos: 1. Declarar2. Abrir3. Usar (normalmente en una estructura repetitiva
hasta fin del cursor) 4. Cerrar el cursor.
34
Oracle
- cursor <<nombre>> is<<sentenciaSelect>>
- open <<nombre>>- fetch <<nombre>> into
<<variables>>- close <<nombre>>
35
Interbase
Iteracion en consultas (equivalente a cursores).- for <<instruccionSelect>> into<<variables>>do <<Instrucción>>
36
MS SQL Server
- declare <<nombre>> cursor for<<sentenciaSelect>>- open <<nombre>>- fetch next from <<nombre>> into<<variables>>- close <<nombre>>
37
Un ejemplo de cursoresMS SQL Server-1
Actualiza los datos de la tabla paralelos con la información que hay en la tabla registro, del siguiente modelo relacional.Estudiante(ci,nom,dir,tel,ing,fechanac)Registro(ci,sigla,sem,nota)Materia(sigla,nom,creditos)Historial(ci,sigla,sem,nota)Paralelo(sigla,sem,inscritos,reprobados,aprobados)
38
Un ejemplo de cursoresMS SQL Server-1
/*CURSORES*/CREATE PROCEDURE l_par(@semx CHAR(7))ASDECLARE @sigla CHAR(7),@inscritos INT,@aprobados
INT,@reprobados INT/* Declaracion del cursor*/DECLARE lpara CURSOR FORSELECT sigla FROM paraleloWHERE sem=@semx/* Abrir el cursor */OPEN lpara/* Usar el cursor */
39
Un ejemplo de cursoresMS SQL Server-2
FETCH NEXT FROM lpara INTO @siglaWHILE (@@FETCH_STATUS=0)BEGIN
SELECT @inscritos=COUNT(*)FROM registroWHERE sigla=@sigla AND sem=@semxSELECT @aprobados=COUNT(*)FROM registroWHERE sigla=@sigla AND sem=@semx AND nota
>=51
40
Un ejemplo de cursoresMS SQL Server-3
SELECT @reprobados=COUNT(*)FROM registroWHERE sigla=@sigla AND sem=@semx AND nota < 51UPDATE paralelo SET inscritos=@inscritos,reprobados=@reprobados,aprobados=@aprobados WHERE CURRENT OF lpara/* Usar el cursor */FETCH NEXT FROM lpara INTO @sigla
END/*cerrar el cursor*/CLOSE lpara/*Eliminar la variable cursor*/ DEALLOCATE lpara
41
Disparadores (triggers)
Un trigger es código que se almacena en la base de datos, su comportamiento es lo que le diferencia de un procedimiento, Se activa con algún evento con un elemento de la base de datos Ej. una tabla, al adicionar, al modificar un valor o eliminar un dato.
42
Ejemplo
Mantiene sincronizada el total de la tabla factura con los datos de detalle.
Factura(num,fecha,nit,total)Detalle(num,codpro,cantidad,monto)
Al inserta o adicionar una fila detalle se aumentará el valor de monto en factura
43
CódigoORACLE
CREATE OR REPLACE TRIGGER facturasumaAFTER INSERT ON detalleFOR EACH ROWBEGIN
UPDATE facturaSET total=total+:new.montoWHERE numero=:new.numero ;
END;
44
¿Preguntas?