Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programando Aplicaciones
Qu conceptos cubre el tema de la clase de hoy:
En esta clase trataremos los mtodos para el desarrollo de aplicaciones usando bases de datos relacionales. Diferencias entre los tipos de aplicaciones y los pasos requeridos para codificar y construir un programa con SQL embebido esttico
Mtodos de programacin
* SQL embebido
* * * * - Esttico - Dinmico Call Level Interface (CLI)/ODBC Interfaces Java - JDBC - SQLJ DB2 Application Programming Interfaces (APIs) Otras interfaces, y herramientas ODBC para usuarios finales
Mtodos de programacin:
SQL embebido permite a los desarrolladores codificar aplicaciones usando sentencias SQL en una sintaxis que es fcil de entender. Las sentencias SQL son "embebidas" en el cdigo fuente de la aplicacin. Un programa SQL embebido debe ser precompilado y luego compilado/ linkeado. CLI/ ODBC no requiere precompilacin. Hay un conjunto de llamadas a funcin hechas desde el programa.
Mtodos de programacin
Interfaces Java: El DBMS provee soporte para diferentes tipos de programas Java incluyendo applets, aplicaciones, servles... DB2 provee APIs nativas para los lenguajes de programacin soportados, que pueden ser llamadas directamente en una aplicacin. Otras interfaces y herramientas:Hay numerosas aplicaciones de usuarios finales y herramientas de terceros (third-party) para construir aplicaciones que se conectan con el DBMS.
SQ L EM BEB ID O B EB
SQL embebido
Se pueden embeber sentencias SQ L en aplicaciones permitindoles efectuar cualquier tarea soportada por SQ L, tales como recuperar o almacenar datos. Una aplicacin en la cual se embebe sentencias SQ L se llama pr ogr ama anfitrin. Una lenguaje de programacin en el cual se embebe sentencias SQ L se llama lenguaje anfitrin Las sentencias SQ L proveen la interfase con la base de datos, mientr as que el lenguaje anfitrin provee el soporte necesario r estante para que se ejecute la aplicacin.
Sentencias SQLestticas son aquellas sentencias cuyo tipo y el objeto de la base de datos accedido por ella, son conocidos antes de correr la aplicacin. Lo nico desconocido son los valores de los datos que la sentencia est consultando o modificando. Las sentencias SQL estticas, embebidas en un programa anfitrin deben ser procesadas por el preprocesador de SQL antes de compilar el programa de aplicacin.
Digresin
El DBMS m antiene estadsticas sobre las caractersticas fsicas de las tablas y sus nidices asociados. Esas caractersticas incluyen: nm ero de registros, nm eros de pginas y longitud prom edio de los registros. El optim izador, utiliza estas estadsticas cuando determ ina el cam ino de acceso a los datos.
JAVA
Ventajas
Paquetes optimizados, disponibles en tiempo de ejecucin Persistencia de las sentencias SQL estticas
Desventajas
Debe saber qu SQL son necesarios Requiere precompilacin
Se requiere SQL dinmico cuando: * No se conoce el nombre o tipo de la columna en la sentencia SQL * No se conoce el nmero de columnas que sern devueltas por la sentencia SQL * No se conoce el nombre de la tabla o vista en la sentencia SQL
Ventajas
Se usan las estadsticas actuales SQL mas flexible posible
Desventajas
El control de acceso debe realizarse al nivel de nivel de sentencia Mayor costo porque se prepara cada sentencia en tiempo de ejecucin
L d elaterm al ee esd in A alassen cias rm ten W E EE P >10" H R M -ID P aralasen cia-->p rep ten lan E tap jecu lan W E EE P >:V R N H R M -ID A _A F S lasvariab etea les an n fitrio as
Call L evel Interface -ODBC Interfaces Java - JDBC- SQL J DB2 APIs Otras interfaces, y herramientas ODBCpara usuarios finales
Desventajas
Restringido a C/ C++ Vinculacin dinmica (Dynamic bindings) es mas lenta No puede usar caractersticas "embebidas" como SQL compuesto
Desventajas
Destrezas en programacin Java Puede ser mas lento dado que Java es intrprete.
DB2 APIs
DB2 APIs proveen acceso a funciones de DB2 desde lenguajes de programacin compilados e interpretados. las APIs se subdividen en base a las funciones que proveen: Entorno: Manipulan en entorno de DB2 creando/eliminando/catalogando bases de datos. Utilitarias:Proveen funciones administrativas y accede a funciones de DB2 tales como import, export, backup, restore, etc. Configuracin: Puesta a punto de la base de datos, configuraciones de administracin de DB
DB2 APIs
Precompilador: Para aquellos que quieren escribir su propio precompilador para un lenguaje de programacin no soportado. Las APIs proveen acceso a algunas funciones no disponibles en SQL embebido o a travs de CLI. Las APIs deben ser codificadas en programas C/C++, COBOL or FORTRAN y deben ser compiladas. Estas APIs son llamadas a funciones y son mas difciles de escribir que usar SQL embebido.
Ventajas
Puede usar caracteristicas avanzadas de DB2 (Table Space Admin) No necesita precompilacin Utiliza lenguajes de programacin anfitrin
Desventajas
Requiere compilacin de leng anf. Puede ser mas dificil de implementar No facilmente portable No emite sentencias SQL
DB2CERT.PRZ
Desventajas Inapropiado para aplicaciones complejas Puede no ser posible acceder a ciertas funciones y caractersticas propias del DBMS.
Cmo embeber una sentencia SQL Variables anfitrionas Seccin: DECLARE Devolucin de cdigos y mensajes Proposicin WHENEVER Recuperacin de datos SELECT INTO - VALUES INTO - Cursores Ejemplos Pasos de preparacin de programas
Variables anfitrionas
Las variables anfitrionas son usadas para pasar informacin/ datos entre la aplicacin y la base de datos. Una variable anfitriona debe ser definida en la seccin DECLARE del programa y debe ser precedida con un :(dos puntos) cuando es referenciada en el programa
Ej.: EXEC SQL BEGIN DECLARE SECTION; long cantidad, nro_factura char nom_cliente[20], direc[20] char fecha_nacim[11] EXEC SQL END DECLARE SECTION;
Variables anfitrionas
Una variable anfitriona debe ser un identificador simple sin ningn modificador del lenguaje anfitrin. Por ejemplo :x[5] :x.sueldo :x > sueldo no se pueden usar en una proposicin SQL. Si se puede puede usar en una proposicin SQL el operador de indireccin (tal como :*x) y slo si la variable anfitriona es declarada tipo puntero.
La SQLCA es una estructura declarada en el archivo header: sqlca.h. Hay dos mtodos para definir la SQLCA
Usar EXEC SQL INCLUDE SQLCA. Declarar una estructura llamada sqlca.
SQ L Co m m u n ic atio n s Are a ( 3)
Descripcin
Debe contener el 'SQLCA' Longitud de SQLCA (debe ser 136) Cdigo de error Longitud de sqlerrmc Uno o mas mensajes Mdulo de programa que caus el error 6 enteros conteniendo datos extra de diagnstico Indicadores de condicin Warning( de advertencia) Cdigo de error cross-platform(SQL92)
La SQ LCA es una estr uctura de datos definida por DB2 que se usa para la comunicacin entre la base de datos y el program a de aplicacin. La SQ LCA debe estar embebida en todos los program as SQ L embebidos.
Se p u ed e in clu ir la SQLCA u san d o la sin tax is EXEC SQL INCLU D E SQLCA .
La SQ LCA se carga con inform acin sobre cada sentencia SQ L y retorna a la aplicacin. La SQ LCA debe ser exam inada despus de cada sentencia para asegurarse que fue exitosa. Tipo de informacin contenida en el SQ LCA include:
E l SQ L code de la sen ten cia E l SQ L state(cdigo estan dar basado en ISO /AN SI SQ L9 2) D escripcin de error (si es aplicable)
DB2CERT.PRZ
WHENEVER (2)
D B2 p r o ve e la cap acid ad d e hace r u n p r o ce sam ie n to co n d icio n al e n caso d e qu e o cu r r a u n e r r o r SQ L e n la ap licaci n . U san d o la sin t ax is EX EC SQ L W H EN EVER e l p r o gr am a p u e d e se r r am ificad o a o t r as p ar t e s d e l p r o gr am a b asad o e n :
q u e o c u r r a u n SQ LER R O R e j: SQ LC O D E n e g a t i v o q u e o c u r r a u n SQ L W a r n i n g e j: SQ LC O D E p o s i t i v o U n a c o n s u l t a n o d e v u e l v a d at o s o e n c u e n t r e e l f i n d e l a tab la e j: SQ LC O D E 1 0 0 La sin t ax is p u e d e se r EX EC SQ L W H EN EV ER .... C O N T I N U E o b i e n EX EC SQ L W H EN EV ER .... G O T O
SELECT INTO
Debe tener una variable anfitriona en correspondencia con cada columna Debe retornar una sola fila. Condiciones de error:Warning flag cargada en la SQLCA si no se corresponden los tipos de datos entre columnas y variables anfitrionas SQLCODE +100/ SQLSTATE 02000 no encuentra ninguna fila. SQLCODE -811/ SQLSTATE 2100 ms de una fila Ej.:
VAL S INTO UE
V LUESINTO devuelve REGISTROSESPECIA A LES, CONSTA NTESy V RIA LESA A B NFITRIONA S Tambin puede ser usado como una interfase para invocar UDF's Registros especiales
Nombre
CURRENT DATE CURRENT SERVER CURRENT TIME CURRENT TIMESTAMP CURRENT TIMEZONE USER CURRENT EXPLAIN MODE CURRENT EXPLAIN SNAPSHOT CURRENT FUNCTION PATH CURRENT QUERYOPTIMIZATION
Descripcn
Fecha en el DB Server 2 Alias de la base de datos activa Hora en el DB Server 2 Timestamp en el DB Server 2 Timezone difference en el DB Server de UTC 2 Userid activo Seteado por la opcin B IND EXPLAIN Seteado por la opcin B IND EXPLSNAP Seteado por la opcin B IND FUNCPATH Seteado por la opcin B IND QUERY OPT
VALUES INTO no se usa para recuperar datos de la base de datos, se usa para traer datos de los registros de DB2, constantes o UDFs .
CURSORES
Las consultas embebidas son ms complejas que las operaciones de UPDATE, INSERT o DELETE porque necesitan devolver datos al programa de aplicacin y el nmero de filas que devuelve generalmente no es conocido de antemano. Para escribir un programa que recupera datos de una base de datos se necesita un mecanismo que especifique las filas a recuperar y luego las traiga al programa una a una. Este mecanismo se llama cursor.
Los registros especiales contienen informacin actual sobre la aplicacin y DB2. La sintaxis es:
VALUES nombre_registro INTO :var_anfitriona Ej:VALUES(CURRENT DATE, CURRENT TIME) INTO :hoy,:ahora La sintaxis para usar VALUES INTO para invocar una UDF es: VALUES (nombre_udf (param1,...,paramN)) El resultado, ser un valor escalar
CURSORES (2)
El uso de cursores requiere de 5 pasos:1. Declarar el cursor, especificando nombre y tipo. 2. Abrir el cursor, para formar el conjunto resultante 3. Traer el resultado una fila por vez. 4. (Optional) Update / Delete la fila actual 5. Cerrar el cursor
CURSORE (3) S
Para usar cursores se han definido un conjunto de pasos que debe ser seguidos
Los cursores son unidireccionales (forw ard only) Hay tres tipos de cursores:
1. Read-only 2. Updateable - se usa la clusula FOR UPDATE. 3. Ambiguous - No se puede determinar el tipo de cursor por la sentencia SELECT o DECLARE que est siendo usada.
CURSORES (4)
2. El cursor debe ser abierto antes que
pueda ser usado para recuperar datos.
Abriendo el cursor se construye el conjunto resultante de las sentencia declarada en el paso 1. Esto posiciona el cursor antes de la primera fila del conjunto resultante.
CURSORES (5)
4. Los datos pueden ser actualizados usando las sentencias delete/ update.
Update o delete modificar o eliminar las fila donde el cursor est posicionado.
3. Los datos pueden ser luego traidos de a una fila por vez.
A medida que se trae cada fila, se debe "chequear" el SQLCODE para ver el resultado final del conjunto resultante (SQL code 100).
5. Una vez que el cursor ya no es requerido debe ser cerrado para liberar cualquier bloqueo obtenido.
El nombre del cursor debe ser especificado en la sentencia CLOSE CURSOR.
Updateable
Se especifica usando FOR UPDATE
Ambiguous
Sin ninguna clusula FOR
Un cursor puede ser read-only, updateable, o ambiguous basado segn como el cursor se declara y se usa. Un cursor de slo-lectura se usa slo para seleccionar los datos. Un cursor actualizable se declara en la clusula FOR UPDATE. Puede usarse para acceder una sola vista o tabla. Para un cursor ambiguo el tipo no puede determinarse de la declaracin o la sentencia.. Un cursor tambin puede definirse WITH HOLD: un cursor definido WITH HOLD mantendr su posicin durante las transacciones y no se cerrar automticamente por un COMMIT. Un rollback cerrar un cursor definido WITH HOLD pero un , COMMIT solo mueve el cursor despus de la fila actual.
10
CURSORES (8)
Sintaxis de las sentencias DECLARE, OPEN FETCH YCLOSE Ejemplos:
EXEC SQL OPEN cr1; EXEC SQL FETCH cr1 INTO :cliente, :arti, :cantidad; EXEC SQL CLOSE cr1; EXEC SQL UPDATE cliente SET nombre-cliente = 'Adriana Caniglia', WHERE CURRENT OF cr2;
Tareas
Conectar con la base de datos
miprog.exe
SQ L e m b e b i d o
..
PRECOMPILE
El comando PRECOMPILE procesa un archivo fuente de un programa de aplicacin. Produce un archivo fuente modificado, conteniendo llamadas al lenguaje principal equivalentes a las proposiciones SQL y, por defecto, crea un paquete en la base de datos. Las extensiones de los archivos en lenguaje anfitrin C para el precompilador son:
.sqc .c entrada-fuente salida-fuente modificado
Si el programa se enva a otros para correr, DEBE especificarse el archivo bind. 3. Compilar y linkear el archivo fuente modificado. 4. Vincular el archivo bind a la base de datos: 1. Si el programa contena SQL esttico Y 2. Si fue creado un archivo bind en el paso 2 5. Ahora el programa est listo para ser corrido.
11
PRECOMPILE (2)
El paquete puede ser almacenado en un archivo bind o directamente en la base de datos. Crear un archivo bind y vincularlo separadamente se conoce como deferred binding o vinculacin diferida. Esta vinculacin requiere un proceso de dos pasos:
Crear un archivo bind (que contiene el paquete) Vincular el paquete a la base de datos o sea vincular el archivo de vinculaciones generado por el precompilador, mediante el mandato BIND.
Query Compilation
SQL Query
Compilacin de consultas
SQL Compiler
Access Plan
Parse Query Check Semantics Rewrite Query Optimise Access Plan Generate Code Executable Plan db2expln Query Graph Model
Desarrollador a de cdigo de un prog. SQLE statico BIND E sttico Usuario final ingresa parametros para query E jecuta consultas en el servidor DB
comando BIND
E jecucin de paquetes
PREP ARE
Ejecuta
Ejecutables y paquetes
miaplic.sqc
C O M P I L A D O R
B I N D E R
DS AE TR AV B I AC SE ES
Tablas Indices
Paquetes
PREP
CT miaplic miaplic.c CT Consistency Token
miaplic.bnd
L I N K E R
BIND
paquete miaplic CT
DB2CERT.PRZ
12