Programación
SQL
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
Tipos de RDBMS
De escritorio
Características
Para pocos usuarios
Programación en una sola capa Débil en:
Concurrencia, Transacciones Recuperación
4
RDBMS de escritorio
Aplicación
BDE/DAO
Base de Datos
Aplicación
Tipos de RDBMS
Basado en Servidor
Características
Para muchos usuarios
Programación en varias capas Fuerte en
Concurrencia Transacciones Recuperación
Ej. Oracle, MsSQL, Interbase, Informix,
6
RDBMS basado en servidor
Aplicación
Cliente SQL
Aplicación
Cliente SQL Servidor
SQL
Potencialidades en
Servidores SQL
Trabajo es más productivo
Concurrencia, implementar transacciones atómicas Conversación basada en el lenguaje SQL
Mantener Código en el servidor Procedimientos:
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
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.
Oracle
Acepta 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
10
Interbase
Acepta muchas plataformas
El mantenimiento Simple. Aunque su entorno de
administración 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
estándares.
El uso de Restricción de Integridad Referencial es
completo
MS SQL Server
Entorno MS Windows
Win NT, WINxx, Windows XP, Windows 2003.
Instalación 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
Integración con otros productos
Las últimas versiones MS SQL Server 7.0, MS SQL
12
Procedimientos Almacenados
Un procedimiento se puede entender
como un algoritmo cuya definición
reside en la base de datos y es
Definición y ejecución de un
Procedimiento-1
ORACLE
Para crear:
Create or replace procedure
<<
nombre>>
(<<
parámetros>>
)
as
<<CuerpodeProcedimiento>>
Llamar procedimientos:
14
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;
Definición y ejecución de un
Procedimiento-2
INTERBASE Para crear:
create procedure <<
nombre>>
[(<<
parametrosdeentrada>>
)][returns (<<
parametros de salida>>
)] as<<Cuerpodeprocedimiento>>
Llamar procedimientos:
execute procedure <<nombre>>
16
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
; !!
Definición y ejecución de un
Procedimiento-3
MS SQL SERVER
Para crear
Create procedure <<
nombre>>
(<<parametrosdeEntradaySalida>>)
as
<<cuerpodeprocedimiento>>
Llamar procedimientos:
18
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
Ejecutando el procedimiento
MS SQL Server
EXEC clienteInsProc ’452341’, ’JOSE
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)
Ejemplo 4 - código 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
22
Aspectos Complementarios
de
Uso de variables o
identificadores
-1
ORACLE
La declaración se hace así:
declare
<<
nombrevar>>
tipo
Ej.
24
Uso de variables o
identificadores
-2
INTERBASE
Para Declarar:
declare variable
<<
nombrevar>>
tipo
Ej.
Uso de variables o
identificadores
-3
MS SQL SERVER
Al igual que en los anteriores, excepto que
el nombre siempre debe comenzar con el
símbolo @:
declare
<<
nombrevar>>
tipo
Ej.
26
Asignaciones-1
ORACLE
Para la Asignación se usa :=
<<Variable>>
:=<<
Expresión>>
Ej.
x:=x+1
Asignaciones-2
INTERBASE
La asignación es algo muy simple
Variable
=
Expresion
Ejemplo.
28
Asignaciones-3
MS SQL SERVER
Una asignación se ve algo distinto
select
<<Variable>>
=<<
Expresión>>
Ej.
select
@y=@y+1;
Estructuras de Control-1
ORACLE
Condicionales
if (<<condicion>>)
then
<<instruccion1>>
[else
<< instruccion2>>]
Ciclos
while (<<Condicion>>) loop
<<instrucción>>
30
Estructuras de Control-2
INTERBASE
Condicionales
if
(<<
condicion>>
)
then
<<
instruccion1>>
[
else
<<instruccion2>>
]
Ciclos
while
(<<c
ondicion>>
)
do
Estructuras de Control-3
Condicionales
if (<<condicion>>)
<< instruccion1>>
[else
<< instruccion2>>]
select case
when <<condicion1>> then <<valor1Mostrar>> …
when <<condicionN>> then <<valorNMostrar>> end
Ciclos
while (<<Condicion>>) do
32
Un poco de código
MS SQL Server
DECLARE @x INT SET @x=2
SELECT @x=@x+4 SELECT @x
IF @x>5
SELECT 'mayor a 5' SELECT CASE
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)
34
Oracle
-
cursor
<<
nombre>>
is
<<
sentenciaSelect>>
-
open
<<
nombre>>
-
fetch
<<
nombre>>
into
<<
variables>>
Interbase
Iteracion en consultas (equivalente a
cursores).
-
for
<<
instruccionSelect>>
into
<<
variables>>
36
MS SQL Server
-
declare
<<
nombre>>
cursor for
<<
sentenciaSelect>>
-
open
<<
nombre>>
-
fetch next from
<<
nombre>>
into
<<
variables>>
Un ejemplo de cursores
MS 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)
38
Un ejemplo de cursores
MS SQL Server-1
/*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
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
40
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
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
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
Código
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 ;
44