Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacioncon SQL PL
Programacioncon SQL PL
BD con SQL
Pedro Pablo Alarcn
Agustn Yage
Departamento de O.E.I.
Escuela Universitaria de Informtica
Universidad Politcnica de Madrid
2001 P.P. Alarcn, A. Yage
? Programacin
en el Servidor
1. Introduccin ............................................... 2
2. Servidor de Datos ...................................... 2
3. Programacin de acciones y tareas .......... 3
?
1. Introduccin
?
? Desarrollo
de la aplicacin en el Cliente:
2. Servidor de Datos
?
un
Debe permitir:
Definicin de datos (LDD)
Servidor de Datos
?
......
de control de flujo
Extensiones de SQL
? Disparadores
almacenados
y procedimientos
almacenados
Suelen ir asociados a la capa de negocio de la
aplicacin y por tanto permiten trasladar al
servidor una parte de la lgica del negocio. La
utilizacin de disparadores permite disminuir el
trfico de red de la aplicacin, y facilita la lgica
del programa cliente que realiza el acceso a la
base de datos
Pueden entenderse como un entorno basado en
LDD y LMD, ya que se almacenan en el esquema
de la base de datos
2001 P.P. Alarcn, A. Yage
Ampliacin de SQL
DECLARE para la definicin de variables
BEGIN .. END, para la definicin de bloques de
instrucciones SQL
IF .. ELSE para la ejecucin condicional
WHILE para ejecucin repetitiva o iterativa
RETURN, para
almacenados
la
definicin
de
procedimientos
Procedimientos Almacenados
? Compuestos
de
instrucciones SQL
instrucciones de control de flujo
? Son
? Pueden
Procedimientos Almacenados
CREATE PROCEDURE calcularFunSueldo @tipoFun char(3),
@resultado money output
AS
if tipoFun = max
select @resultado= max(sueldo) from categoria
else if tipoFun = min
select @resultado= min(sueldo) from categoria
else if tipoFun = avg
begin
select @resultado= avg(sueldo) from categoria
end
return
Disparadores
?
Disparadores
CREATE TRIGGER ActualizaStock
ON Pedidos
FOR insert, update , delete
Update Almacen
set stock = stock + (select cantidad from inserted
where inserted.codArt = Almacen.CodArt)
where codArt = inserted.codArt
Update Almacen
set stock = stock - (select cantidad from inserted
where deleted.codArt = Almacen.CodArt)
where codArt = deleted.codArt
Interbase
CREATE PROCEDURE nombre [(param <tipodato> [, param <tipodato> ...])]
[RETURNS <tipodato> [, param <tipodato> ...])]
AS <cuerpo> [terminador]
<cuerpo> = [<listaVariables>] <bloque>
< listaVariables > = DECLARE VARIABLE var <tipodato>;
[DECLARE VARIABLE var <tipodato>; ...]
<bloque> =BEGIN
<sentencias>
[<sentencias> ...]
END
<sentencias> = {<bloque> | sentencia;}
EXECUTE PROCEDURE nombre [param [, param ...]];
2001 P.P. Alarcn, A. Yage
Interbase
CREATE TRIGGER nombre FOR tabla
[ACTIVE | INACTIVE] {BEFORE | AFTER}
{DELETE | INSERT | UPDATE}
[POSITION numero]
AS <cuerpo> terminador
<cuerpo> = [<lista_declaracion_variables>] <bloque>
< lista_declaracion_variables > =
DECLARE VARIABLE variable <tipodato>;
[DECLARE VARIABLE variable <tipodato>; ...]
<bloque> = BEGIN
<sentencia>
[<sentencia> ...]
END
<sentencia> = {<bloque> | sentencia;}
2001 P.P. Alarcn, A. Yage
Interbase
Cursor
DECLARE cursor CURSOR FOR <select>
[FOR UPDATE OF <col> [, <col>...]];
Sentencias asociadas: OPEN, FETCH, CLOSE
Funciones Externas
DECLARE EXTERNAL FUNCTION nombre [<tipodato> | CSTRING (int)
[, <tipodato> | CSTRING (int) ...]]
RETURNS {<tipodato> [BY VALUE] | CSTRING (int)}
ENTRY_POINT "<entryname>"
MODULE_NAME "<modulename>";
2001 P.P. Alarcn, A. Yage
SQL Server
CREATE PROC[EDURE] nombreProcedimiento [;nmero]
[{@parmetro tipoDatos} [VARYING] [= predeterminado] [OUTPUT]]
[,...n]
[WITH
{RECOMPILE
| ENCRYPTION
| RECOMPILE, ENCRYPTION
}
]
[FOR REPLICATION]
AS
instruccinSQL [...n]
SQL Server
CREATE TRIGGER nombre ON tabla
[WITH ENCRYPTION]
{ {FOR { [DELETE] [,] [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
instruccinSQL [...n] }
|
{FOR { [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
{IF UPDATE (columna) [{AND | OR} UPDATE (columna)] [...n]
| IF (COLUMNS_UPDATED() {operadorNivelBit} mscaraBitsActualizada)
{ operadorComparacin} mscaraBitsColumna [...n]
}
instruccinSQL [...n]
}
}
2001 P.P. Alarcn, A. Yage
Cursores
Sintaxis de SQL-92
DECLARE nombreCursor [INSENSITIVE] [SCROLL] CURSOR
FOR instruccinSELECT
[FOR {READ ONLY | UPDATE [OF listaColumnas [,...n]]}]
4. Arquitectura Cliente/Servidor
? Un
Arquitectura Cliente/Servidor
Base de
Datos
Disco
Servidor
(SGBD)
SELECT *
FROM CLIENTES
WHERE CIUDAD=MADRID
10
Arquitectura Cliente/Servidor
Servidor
(SGBD)
Cliente
Base de
Datos
Disco
SELECT *
FROM CLIENTES
100.000 filas
Menor Trfico en la Red
SELECT *
FROM CLIENTES
WHERE CIUDAD=MADRID
10.000 filas
10 filas
Ordenador Servidor
Ordenador Cliente
Petici n
Red
Respu
Aplicacin
Servidora
esta
Petici n
Respues
ta
Aplicacin
Cliente
11
Interface
Interface
Servicios
de datos
Servicios
del negocio
Servicios
de Usuario
Servicios de usuario
Servicios de negocio
Servicios de datos
12
SQL Embebido
Precompilador
(del SGBDR)
Program Acceso;
Var
....
Begin
.....
EXEC SQL DECLARE CURSOR cli
FOR SELECT * FROM CLIENTES
....
Programa
Fuente
Compilador
Programa
Precompilado
Programa
Objeto
End
SGBDR
BD
13
ODBC
Aplicacin
ORACLE
Driver Interbase
Origen de datos:
Albaranes
BD1.GDB
BD2.MDB
ODBC
Protocolo estndar para el acceso a la
informacin de servidores de bases de datos
SQL.
? Hay que instalar controladores de ODBC que
permitan que se realice la conexin a estos
servidores de bases de datos SQL.
?
Aplicacin
Administrador de
controladores ODBC
Controlador
ODBC
Fuente de
Datos
14
ODBC
?
ODBC
?
15
ODBC
? Cursores:
Un cursor es un puntero a las filas resultantes de
una consulta sobre una base de datos.
Los cursores deben situarse sobre la primera fila y
deben permitir desplazamientos bidireccionales
sobre el conjunto resultado.
Tipos de cursores:
Estticos: no se actualizan.Reflejan el estado de los datos
en el momento de la consulta. (snapshot)
Dinmicos: refrescan el estado de las memorias locales
cada vez que un usuario realiza una modificacin.
Pseudodinmicos: el refresco de los datos de un registro se
realiza cuando el usuario se sita sobre l.
2001 P.P. Alarcn, A. Yage
ODBC
? Configuracin
de ODBC:
DSN de Sistema:
permite establecer la configuracin de la conexin para el equipo
local y para cualquier usuario de la mquina.
DSN de Archivo:
permite establecer la configuracin de la conexin para cualquier
usuario con el mismo controlador.
2001 P.P. Alarcn, A. Yage
16
JDBC
JDBC es para Java lo que ODBC para
Windows.
? Es un conjunto de primitivas que los drivers
JDBC deben poder entender para acceder a
una base de datos.
? Permiten a cualquier programa Java acceder
a bases de datos. El acceso se hace a travs
de un driver JDBC especfico.
? Es necesario JDBC porque ODBC est
escrito en C y por lo tanto es dependiente de
la mquina.
?
JDBC
?
Esquema de conectividad:
17
6. Utilizacin de SQL
? Interaccin
con la BD
? Java
? Visual
Basic
Interaccin con la BD
?
?
?
?
pl/sql de Oracle
Transact-sql de SqlServer
i4gl de Informix
...
18
Ejemplo
SELECT Nombre, Apellidos, Sueldo
FROM Empleados
WHERE sueldo > 2000
Nombre
Apellidos
Sueldo
Rosa
Pablo
Alvarez
Prez
3000
2500
19
20
Java
?
?
?
?
?
?
?
?
?
21
Java
? Conexin
(Objeto Connection)
close()
cierra la conexin de la base de datos
commit() y rollback()
confirma o rechaza los cambios en la base de datos
createStatement()
crea un nuevo objeto de sentencia sql
Java
? Sentencia
(Objeto Statement)
close()
cierra la conexin con la base de datos
executeQuery(String)
ejecuta la consulta representada en String
devuelve un ResultSet con el resultado
executeUpdate(String)
ejecuta la sentencia representada en String
Update, Insert, Delete o sentencias de definicin
devuelve un entero con el nmero de filas afectadas
2001 P.P. Alarcn, A. Yage
22
Java
?
findColumn(String)
devuelve la posicin que ocupa la columna String
getXxxx(int)
devuelve el valor de la columna que ocupa la columna int en la fila
actual
getXxxx(String)
devuelve el valor de la columna String en la fila actual
next()
devuelve true si hay mas filas, si no hay devuelve false
Java (ejemplo)
Database mibd = new Database();
mibd.setConnection (new borland.jbc1.dataset.ConnectionDescriptor
(jdbc:odbc:dataset curso, SYSDBA, masterkey, false,
sun.jdbc.odbc.JdbcOdbcDriver));
Statement mSql = mibd.createStatement ();
ResultSet mRs = mSql.ExecuteQuery
(select Nombre, categ FROM conductores);
while (mRs.next()) {
String mNombre = getString(Nombre);
int mCateg = getInt(categ);
}
2001 P.P. Alarcn, A. Yage
23