Sei sulla pagina 1di 44

Programacin SQL

Lucio Salgado Diciembre 2008


1

Gestionadores de Bases de Datos (DBMS)


Es el software que permite administrar bases de datos, a travs de ella el usuario puede usar los datos con mucha transparencia. En trminos simples es una interfaz datos usuario. Los basados en el modelo relacional se denomina RDBMS
2

Tipos de RDBMS
De escritorio
Caractersticas
Para pocos usuarios Programacin en una sola capa Dbil en: Concurrencia, Transacciones Recuperacin Ej. Paradox, Dbase, MsAccess
3

RDBMS de escritorio
Aplicacin BDE/DAO

Aplicacin BDE/DAO

Base de Datos

Tipos de RDBMS
Basado en Servidor
Caractersticas
Para muchos usuarios Programacin en varias capas Fuerte en Concurrencia Transacciones Recuperacin Ej. Oracle, MsSQL, Interbase, Informix, Sybase,DB/2, Btrieve. MySQL,Ingres
5

RDBMS basado en servidor


Aplicacin Cliente SQL Servidor SQL Aplicacin Cliente SQL

Base de Datos

Potencialidades en Servidores SQL


Trabajo es ms productivo Concurrencia, implementar transacciones atmicas Conversacin basada en el lenguaje SQL Mantener Cdigo en el servidor Procedimientos:
Conjuntos de instrucciones que se guardan en la base de datos. Evitan que los datos viajen

Triggers:
Son tambin secuencia de instrucciones pero se activan en momentos especiales (UPDATE,INSERT,DELETE)

Criterios para evaluar un servidor SQL


Plataformas Soportadas. Soporte a tipos de datos. Lenguaje de triggers y procedimientos. Implementacin de transacciones, recuperacin y aislamiento. Segmentacin. Replicacin. Precio.
8

Oracle
Acepta varias plataformas, como Windows, Unix, Linux, etc. Permite funciones avanzadas. Segmentacin y Replicacin. Todos los tipos de datos. Extensin 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

Interbase
Acepta muchas plataformas El mantenimiento Simple. Aunque su entorno de administracin deja mucho que desear. Cada base de datos se localiza en un archivo .gdb Las Copias de seguridad se pueden realizar en caliente Acepta todo tipo de datos y orientado a cumplir los estndares. El uso de Restriccin de Integridad Referencial es completo Tiene un Lenguaje de procedimientos completo. Acceso concurrente garantizado.
10

MS SQL Server
Entorno MS Windows Instalacin y manejo sencillos. Mantenimiento avanzado algo complicado No copias de seguridad en vivo Integridad referencial no muy sofisticado. Muy particular su lenguaje de procedimientos: Transact-SQL Integracin con otros productos Las ltimas versiones MS SQL Server 7.0, MS SQL Server 2000, MS SQL Server 2005, son mucho ms sofisticadas y estables.
11

Win NT, WINxx, Windows XP, Windows 2003.

Procedimientos Almacenados
Un procedimiento se puede entender como un algoritmo cuya definicin reside en la base de datos y es ejecutado por el servidor del sistema, cuando algn usuario lo solicite.

12

Definicin y ejecucin de un Procedimiento-1


ORACLE Para crear: Create or replace procedure <<nombre>> (<<parmetros>>) as

<<CuerpodeProcedimiento>> execute <<nombre>> [(<<parmetros>>)]


13

Llamar procedimientos:

Ejemplo-1
CREATE 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; 14 /

Definicin y ejecucin de un Procedimiento-2


INTERBASE Para crear: create procedure <<nombre>> [(<<parametrosdeentrada>>)] [returns (<<parametros de salida>>)] as

<<Cuerpodeprocedimiento>>
Llamar procedimientos:

execute procedure <<nombre>> <<parametrosentradas>> returning_values <<parametrosdeSalida>>


15

Ejemplo-2
SET TERM !! ; CREATE PROCEDURE clienteInsProc ( v_ruc CHAR(10), v_nombre CHAR(25), v_direccion CHAR(10), v_telefono CHAR(10)) AS BEGIN INSERT INTO cliente(ruc,nombre, direccion, telefono) VALUES(:v_ruc,:v_nombre,:v_direccion,:v_telefono); END ; !! SET TERM ; !!
16

Definicin y ejecucin de un Procedimiento-3


MS SQL SERVER Para crear
Create procedure <<nombre>>

(<<parametrosdeEntradaySalida>>)
as

<<cuerpodeprocedimiento>>

Llamar procedimientos:

exec nombre [parametros]


17

Ejemplo 3
CREATE PROCEDURE clienteInsProc ( @ruc char(10), @nombre char(25) =NULL, @direccion char(10) =NULL, @telefono char(10) =NULL) AS BEGIN INSERT INTO cliente(ruc,nombre,direccion, telefono) VALUES(@ruc,@nombre,@direccion,@telefono) END go
18

Ejecutando el procedimiento
MS SQL Server
EXEC clienteInsProc 452341, JOSE BUENDIA, SUCRE #1435, 5243612

19

Ejemplo 4
Actualiza la tabla historial (registro de materias aprobadas) con los datos de la tabla registro para algn 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)
20

Ejemplo 4 - cdigo MS SQL Server


CREATE PROCEDURE act_hist (@cix CHAR(15)) AS BEGIN DELETE FROM historial WHERE ci=@cix INSERT INTO historial (ci,sigla,sem,nota) SELECT ci,sigla,sem,nota FROM registro WHERE ci=@cix AND nota >=51 END
21

Aspectos Complementarios de Programacin

22

Uso de variables o identificadores -1


ORACLE
La declaracin se hace as: declare <<nombrevar>> tipo

Ej.
declare x number declare nom char(20)

23

Uso de variables o identificadores -2


INTERBASE
Para Declarar: declare variable <<nombrevar>> tipo

Ej.
declare variable x char(10); declare variable y integer;

24

Uso de variables o identificadores -3


MS SQL SERVER
Al igual que en los anteriores, excepto que el nombre siempre debe comenzar con el smbolo @: declare <<nombrevar>> tipo

Ej.
declare @x char(10); declare @y integer;
25

Asignaciones-1
ORACLE
Para la Asignacin se usa := <<Variable>>:=<<Expresin>>

Ej. x:=x+1 y:= y*2 +x

26

Asignaciones-2
INTERBASE
La asignacin es algo muy simple Variable=Expresion

Ejemplo. y=y+1; x=2340;

27

Asignaciones-3
MS SQL SERVER
Una asignacin se ve algo distinto select <<Variable>>=<<Expresin>>

Ej.
select @y=@y+1; select @x=2340;

28

Estructuras de Control-1
ORACLE Condicionales
if (<<condicion>>) then <<instruccion1>> [else << instruccion2>>]

Ciclos
while (<<Condicion>>) loop

<<instruccin>>
end loop
29

Estructuras de Control-2
INTERBASE
Condicionales if (<<condicion>>) then <<instruccion1>> [else <<instruccion2>>]

Ciclos
while (<<condicion>>) do

<<instruccin>>
30

Estructuras de Control-3
Condicionales
[else if (<<condicion>>)

<< instruccion1>> << instruccion2>>]

Ciclos

select case when <<condicion1>> then <<valor1Mostrar>> when <<condicionN>> then <<valorNMostrar>> end while (<<Condicion>>) do

<<instruccin>>

31

Un poco de cdigo MS SQL Server


DECLARE @x INT SET @x=2 SELECT @x=@x+4 SELECT @x IF @x>5 SELECT 'mayor a 5' SELECT CASE WHEN @x>5 THEN 'cinco' WHEN @x<10 THEN 'diez' END WHILE (@x<20) BEGIN SET @x=@x+1 SELECT @x END
32

Cursores
Un cursor es una variable de tipo tabla, concretamente puede entenderse como un conjunto de registros. pasos:
1. Declarar 2. Abrir 3. Usar (normalmente en una estructura repetitiva hasta fin del cursor) 4. Cerrar el cursor.
33

Oracle
- cursor <<nombre>> is <<sentenciaSelect>> - open <<nombre>> - fetch <<nombre>> into <<variables>> - close <<nombre>>
34

Interbase
Iteracion en consultas (equivalente a cursores). - for <<instruccionSelect>> into <<variables>> do <<Instruccin>>

35

MS SQL Server
- declare <<nombre>> cursor for <<sentenciaSelect>> - open <<nombre>> - fetch next from <<nombre>> into <<variables>> - close <<nombre>>
36

Un ejemplo de cursores MS SQL Server-1


Actualiza los datos de la tabla paralelos con la informacin 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)

37

/*CURSORES*/ CREATE PROCEDURE l_par (@semx CHAR(7)) AS DECLARE @sigla CHAR(7),@inscritos INT,@aprobados INT,@reprobados INT /* Declaracion del cursor*/ DECLARE lpara CURSOR FOR SELECT sigla FROM paralelo WHERE sem=@semx /* Abrir el cursor */ OPEN lpara /* Usar el cursor */

Un ejemplo de cursores MS SQL Server-1

38

Un ejemplo de cursores MS SQL Server-2


FETCH NEXT FROM lpara INTO @sigla WHILE (@@FETCH_STATUS=0) BEGIN SELECT @inscritos=COUNT(*) FROM registro WHERE sigla=@sigla AND sem=@semx SELECT @aprobados=COUNT(*) FROM registro WHERE sigla=@sigla AND sem=@semx AND nota >=51
39

Un ejemplo de cursores MS SQL Server-3


SELECT @reprobados=COUNT(*) FROM registro WHERE sigla=@sigla AND sem=@semx AND nota < 51 UPDATE paralelo SET inscritos=@inscritos,reprobados=@reprobados,aprobados=@ap robados 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
40

Disparadores (triggers)
Un trigger es cdigo que se almacena en la base de datos, su comportamiento es lo que le diferencia de un procedimiento, Se activa con algn evento con un elemento de la base de datos Ej. una tabla, al adicionar, al modificar un valor o eliminar un dato.
41

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

42

Cdigo ORACLE
CREATE OR REPLACE TRIGGER facturasuma AFTER INSERT ON detalle FOR EACH ROW BEGIN UPDATE factura SET total=total+:new.monto WHERE numero=:new.numero ; END;
43

Preguntas?

44

Potrebbero piacerti anche