Sie sind auf Seite 1von 75

SSSSSSSSS

SSS
SSSSSSS
SSSSSSS
SSS
SSSSSSSSS
QQQQQQQ
QQ QQ
QQ QQ
QQ QQ
QQ QQQ
QQQQQQ QQ
LL
LL
LL
LL
LLLLLLLL
LLLLLLLLL

//
//
//
//
//
//

DDDDDDD
DDDDDDDD
DD DD
DD DD
DD DD
DDDDDDDD
BBBBBBB
BBBBBBBB
BB BB
BBBBBBBB
BB BB
BBBBBBBB
222222222
222
2222222
2222222
222
222222222
I

INDICE
________

CEPTOS.
Conceptos ................................................ 1
Tablas ................................................... 1
Tipos de datos que puede contener una columna de una tabla 2
Indices .................................................. 2

ANISMOS DE SEGURIDAD DE LOS DATOS.


Vistas ................................................... 2
Racf (Resource Access Control Facility) .................. 3
Passwords de ficheros Vsam .............................. 3
Autorizacion ............................................. 3

ANISMOS DE INTEGRIDAD DE LOS DATOS.


Concurrencia ............................................. 3
Recuperacion de datos .................................... 3
- Unidad de recuperacion ............................... 3
Ayudas a la programacion ................................. 4
- Spufi ................................................ 4
- Paneles para preparacion de programas ................ 4
- Paneles para mantenimiento de planes ................. 4
- DCLGEN (Declarations Generator) ...................... 4
- Online Help .......................................... 5

RUCTURA DE UN PROGRAMA QUE OPERA EN UN ENTORNO CICS.


Estructura de un programa que opera en un entorno cics ... 5
Preparacion del programa para la ejecucion ............... 5
- Traslacion ........................................... 5
- Precompilacion ....................................... 6
- Compilacion y link-edicion ........................... 6
- Binding .............................................. 6

TRUCCIONES S.Q.L.
Instrucciones basicas .................................... 7
Clausula Where ........................................... 8
Select into .............................................. 8
Update ................................................... 9
Delete ................................................... 9
Insert ................................................... 10
Insercion a la vez de varias filas de una tabla en otra .. 10
Funciones del cursor ..................................... 11
Declare cursor ........................................... 11
Open ..................................................... 12
Fetch .................................................... 12

II

Whenever not found ....................................... 13


Update ................................................... 13
Delete ................................................... 14
Close .................................................... 14
Opciones de la instruccion select ........................ 15
- Operaciones aritmeticas .............................. 15
- Funciones Built-in ................................... 16
- Avg .................................................. 16
- Max .................................................. 16
- Min .................................................. 16
- Sum .................................................. 16
- Count ................................................ 16
- Clausulas Group by, Having y Order by ................ 17
- Group by ............................................. 17
- Having ............................................... 18
- Order by ............................................. 18
- Union ................................................ 19
Seleccion de datos de varias tablas en una fila (join) ... 20
Opciones de las condiciones de busqueda .................. 21
- Between ... And ...................................... 21
- In ................................................... 21
- Like ................................................. 21
- Is null .............................................. 22

TAS.
Concepto ................................................. 22
Proceso de una vista ..................................... 23
Subquery ................................................. 24
Formas de incluir una subquery en una clausula where o
having ................................................... 24
- Inmediatamente despues de un operador de comparacion.. 24
- Despues de un operador de comparacion seguido de all
o any .................................................. 25
- Despues de In, para indicar que el valor de la expre-
sion debe estar entre los valores devueltos por la sub-
query .................................................. 25
- Despues de Exists, verificacion de que puede ser en-
contrada una fila con la condicion de la subquery ...... 26
Subquery correlativa ..................................... 26
Otros ejemplos ........................................... 26
- Con una SELECT ....................................... 26
- Con una UPDATE ....................................... 27
- Con una DELETE ....................................... 27

FI.
Crear y probar instrucciones SQL ......................... 27
Creacion de una tabla .................................... 28
Creacion de una vista .................................... 28
Creacion de una tabla .................................... 28
Crear un nombre alternativo o sinonimo para una tabla o
vista y dar de baja ese sinonimo ......................... 28

III

ELES.
Panel Principal .......................................... 28
- Especificar un fichero de entrada .................... 28
- Especificar un fichero de salida ..................... 28
- Especificar las opciones de proceso .................. 29
Panel de opciones por defecto ............................ 29
- Especificar otras opciones de proceso ................ 29
- Definir caracteristicas del fichero de salida ........ 29
- Especificar defectos para el formato de salida ....... 30
Panel Commit/Rollback .................................... 30
Restricciones ............................................ 30

IFICACION DE INSTRUCCIONES SQL EN UN PROGRAMA COBOL.


Definir un area de comunicacion llamada SQLCA ............ 31
Describir cada tabla o vista a la que acceda el programa . 31
Codificar instrucciones SQL .............................. 32
- Variables y estructuras host ......................... 32
- Variables indicador .................................. 33
Manejo de codigos de retorno de errores : LA SQLCA ....... 33
Manejo de condiciones excepcionales: Instruccion Whenever. 35
- Tres condiciones que se pueden especificar ........... 36
- Dos acciones que se pueden especificar ............... 36
Sugerencias para la codificacion de instrucciones SQL .... 36
- Facilitar el uso de indices por el DB2 ............... 36
- Facilitar la seleccion de datos de dos o mas tablas .. 36
Notas sobre DB2 / SQL .................................... 37

NDICE I.
Ejemplos de instrucciones sql en cobol II ................ 37
- Distinct ............................................. 37
- Count ................................................ 38
- Sum .................................................. 38
- Union ................................................ 39
- Between (not between) ................................ 40
- In (not in) .......................................... 40
- Like (not like) ...................................... 40
- Group by ............................................. 40
- Max .................................................. 41
- Min .................................................. 41
- Having ............................................... 41

OMENDACIONES PARA EL DISEÑO DE APLICACIONES EN DB2.


Administracion de datos .................................. 42
Administracion de base de datos .......................... 42
Administracion del sistema DB2 ........................... 43
Programador del sistema DB2 .............................. 43
Operacion del sistema DB2 ................................ 44
Analisis de aplicaciones ................................. 44
Programacion de aplicaciones ............................. 45

IV

Soporte de centro de informacion ......................... 45


Representantes de los usuarios ........................... 46
Macro actividades a desarrollar en un proyecto ........... 46
- Planificacion ........................................ 46
- Hw/sw instal. ........................................ 46
- Diseño y desarrollo aplicacion ....................... 46
- Operacion y recuperacion ............................. 47
- Gestion Rdto. ........................................ 47

NIFICACION.
Gestion del proyecto ..................................... 47
Seleccion de la aplicacion piloto ........................ 47
Definicion de estandares ................................. 48
Identificar los recursos a proteger ...................... 48

EÑO Y DESARROLLO DE LA APLICACION.


Establecer el entorno de desarrollo de la aplicacion ..... 48
Analisis de aplicaciones ................................. 49
Diseño de Base de Datos .................................. 49
Desarrollo y prueba de programas ......................... 49
Paso de desarrollo a produccion .......................... 50

EÑO DE BASES DE DATOS.


Introduccion ............................................. 51

EÑO LOGICO DE BASES DE DATOS.


Analisis de datos ........................................ 51
Normalizacion ............................................ 52
Integridad referencial ................................... 53

EGRIDAD DE DATOS.
Un adecuado diseño de base de datos ...................... 53
- Analisis total de los datos .......................... 53
- Normalizacion de los datos ........................... 53
Un adecuado diseño de modulos, codificacion y pruebas .... 54

DIMIENTO Y CONCURRENCIA EN BASE DE DATOS.


Concurrencia ............................................. 55
Trabajo realizado por el DB2 para el SQL ................. 55
Diseño fisico de bases de datos .......................... 56
Seleccion de indices ..................................... 60

CONCEPTOS
_________

El DB2 es un sistema de manejo de bases de datos basado en un mode


relacional de datos. Rueda bajo sistema operativo MVS/SP como un s
sistema de este:

+-------------+
¦ TERMINAL ¦
¦ CICS/OS/VS ¦
+-------------+
¦
+---------¦--------------------------------------------------
¦ v
¦ +------------+ MVS/SD
¦ ¦ CICS/OS/VS ¦-------------+ Sistema Operativo
¦ +------------+ ¦
¦ ¦ ¦
¦ v v
¦ +------------+ +-------+ +-----------+
¦ ¦ IMS/VS ¦ ¦ DB2 ¦<------- ¦ TSO y ¦
¦ ¦ DB ¦ +-------+ ¦ BATCH ¦
¦ +------------+ ¦ +-----------+
+---------¦------------------¦-------------------------------
¦ ¦
v v
+----------+ +-----------+
+----------+ ¦ +----------+ ¦
¦ Bases de ¦ ¦ ¦ Bases de ¦ ¦
¦ Datos ¦--+ ¦ Datos ¦----+
¦ IMS/VS ¦ ¦ DB2 ¦
¦ DL/I ¦ ¦ ¦
+----------+ +----------+

TABLAS
______

Los datos en las bases de datos DB2 estan disponibles para un prog
de aplicacion como un conjunto de tablas. Las tablas son estructur
datos de dos dimensiones, compuestas de FILAS y COLUMNAS.
Un nombre de tabla esta formado por un identificador de la persona
creo la tabla, y de un nombre descriptivo de esta, separados por p

TIPOS DE DATOS QUE PUEDE CONTENER UNA COLUMNA DE UNA TABLA


__________________________________________________________

. Cadenas de caracteres EBCDIC:


CHAR - Cadenas de longitud fija
VARCHAR - Cadenas de longitud variable

. Datos numericos:
SMALLINT - Enteros binarios de media palabra
INTEGER - Enteros binarios de una palabra
DECIMAL - Numeros decimales
FLOAT - Numeros de coma flotante

. Cadenas de caracteres graficos:


GRAFHIC - DBCS (Double Byte Character Data) de longitud
VARGRAPHIC - DBCS de longitud variable

INDICES
_______

El DB2 proporciona dos mecanismos de acceso a tablas, acceso secue


y acceso directo mediante indices. El indice debe ser unico.
Estan basados en los valores de los datos de una o mas columnas, y
mantenidos automaticamente por el DB2 cuando se produce un cambio
los datos contenidos en la tabla. Un programa no se refiere a los
ces, sino que el DB2 selecciona el indice para acceder a los datos
el programa requiere.
El DB2 nunca usa como indice una columna que va a ser actualizada,
una columna que esta siendo comparada con otra de la misma fila.

MECANISMOS DE SEGURIDAD DE LOS DATOS


____________________________________

VISTAS
______

Permiten a un usuario acceder solo a ciertas filas o columnas de u


tabla.

RACF (Resource Access Control Facility)


_______________________________________

Proporciona control de acceso al DB2 por usuarios o aplicaciones n


torizados, a los ficheros vsam que contienen las bases de datos, a
dispositivo de acceso directo, etc.

PASSWORDS DE FICHEROS VSAM


__________________________

Se usan en ficheros no protegidos con RACF.

AUTORIZACION
____________

Mediante instrucciones GRANT y REVOKE de identificadores de usuari

MECANISMOS DE INTEGRIDAD DE LOS DATOS


_____________________________________

CONCURRENCIA
____________

El DB2 permite que mas de un programa acceda a los mismos datos al


mismo tiempo.
La concurrencia es controlada mediante LOCKS. Consisten en asociar
recurso DB2 con un programa, de forma que esta asociacion afecta a
pueden acceder otros programas al mismo recurso. Existen varios ti
S (Share), U (Update), X (Exclusive), etc.
Ningun programa podra acceder a los datos que hayan sido cambiados
otro programa, pero que todavia no esten en la base.
RECUPERACION DE DATOS
_____________________

Unidad de recuperacion
______________________

Proceso que ocurre entre dos puntos de COMMIT. Es una secuencia de


acciones que necesita ser completada para que cualquiera de las ac

nes individuales que la forman pueda considerarse como acabada.


Ejemplo:
Una transaccion que transfiere fondos de una cuenta A a otra B, de
primero sustraer la cantidad a transferir de la cuenta A, y luego
a la cuenta B. Cuando se terminen ambas acciones, y no antes, los
de ambas cuentas seran consistentes.
Una unidad de recuperacion se señala como completa mediante un COM
Synchronization (Sync) Point, de las siguientes formas:
1. Implicitamente al final de una transaccion: EXEC CICS RETURN
2. Explicitamente en puntos de la transaccion: EXEC CICS SYNCPOI
3. Implicitamente : EXEC DLI TERM
4. Implicitamente en un programa BATCH-DLI : EXEC DLI CHKP
Si ocurre una accion y otra no, se dice que la base de datos ha pe
su integridad o consistencia. Para lograr que los datos recuperen
valor que tenian antes de comenzar la unidad de recuperacion, se u
opcion ROLLBACK para el comando SYNCPOINT.

AYUDAS A LA PROGRAMACION
________________________

Spufi:
_____ Permite usar el SQL sin tener que codificar un programa com
mediante instrucciones que pueden ser ejecutadas y mostrada
el terminal.

Paneles para preparacion de programas:


_____________________________________ Permiten la precompilacion,
pilacion, link-edicion y binding de un programa. Solo se ne
ta especificar el nombre del fichero que contiene las instr
nes fuente.

Paneles para mantenimiento de planes:


____________________________________ Con las opciones BIND, REBIN
FREE. Permiten crear, cambiar o borrar el plan de cualquier
grama DB2.

DCLGEN (Declarations Generator):


_______________________________ Usa la informacion del catalogo D
para:
. Crear definiciones de las estructuras de tablas o vist
que van a ser guardadas en librerias de Copys para su

terior inclusion en los programas.


. Producir instrucciones SQL DECLARE TABLE

ONLINE HELP:
___________ Proporciona ayuda durante la ejecucion del spufi.

ESTRUCTURA DE UN PROGRAMA QUE OPERA EN UN ENTORNO CICS


______________________________________________________

+-----------------------------------------------+
¦ APLICACION ¦
¦ ¦
¦ 1 - Area de datos <-----------+ ¦
¦ 2 - SQLCA ¦ ¦
¦ ¦ ¦
¦ +--> 3 - Entrada al programa ¦ ¦
¦ ¦ 4 - Tratar mensaje de entrada ¦ ¦
¦ ¦ 5 - Proceso ¦ ¦
¦ ¦ 6 - Instrucciones SQL ---+ ¦ ¦
¦ ¦ 7 - Mensaje de salida ¦ ¦ ¦
¦ ¦ +-- 8 - Terminacion ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦ ¦
+---¦--¦----------------------------¦----¦------+
¦ ¦ ¦ ¦
¦ ¦ v ¦
+--------¦--------------+ +-----------+ -----> +-----
¦ ENTRY ¦ CICS/OS/VS ¦ ¦ CICS/OS/VS¦ ¦ DB2
¦ v ¦ +-----------+ <----- +-----
¦ EXIT ¦
+-----------------------+

1- DB2 pone los valores de las columnas recuperadas en las variab


del programa.
2- Cada programa que accede a datos DB2 debe tener un area de dat
llamada SQLCA (SQL Comunication Area), usada por el DB2 para d
al programa si la ejecucion de la ultima instruccion SQL ha si
correcta, mediante un codigo de retorno , que se puede examina
los campos SQLCODE y SQLWARN0 (deben ser cero y blanco).

PREPARACION DEL PROGRAMA PARA LA EJECUCION


__________________________________________

a. Traslacion de las instrucciones EXEC por el CICS/OS/VS.


__________

b. Precompilacion del programa.


______________
El precompilador busca errores de sintaxis, y prepara cada in
ccion SQL para compilacion o ensamblaje, dando como resultado
conjunto de instrucciones fuente (modulo fuente).
Ademas, el DB2 crea un DBRM (Data Base Request Module), que s
usado en el paso d, y contiene informacion acerca de cada ins
ccion SQL precompilada.

c. Compilacion ( o ensamblaje) y link-edicion.


___________ ____________
Cada modulo fuente es compilado o ensamblado para dar lugar a
modulo de carga. Al link-editar, los modulos de carga se enla
en un unico modulo objeto.

d. Relacionar el programa y los datos DB2 (binding).


_______
Se relaciona el programa (el DBRM que representa las peticion
SQL hechas por el programa) y las tablas y vistas DB2 que se
ren procesar. Esto da lugar a un plan de aplicacion, el cual
almacenado por el DB2 y usado cuando se ejecute el programa.
El proceso de binding incluye los siguientes pasos:
. Examinar la validez de los nombres de columnas, tabl
vistas utilizados en el programa
. Verificar que la persona esta autorizada a realizar
operaciones de acceso especificadas por las instrucc
SQL del programa
. Seleccionar los caminos de acceso a los datos DB2 qu
programa quiere procesar
Cuando se va a hacer bind de una aplicacion se puede especifi
- Isolation level:
. RR el lock afecta a todas las filas que toca el prog
. CS el lock afecta a todas las filas a las que el pro
esta accediendo actualmente
Se puede hacer lock del espacio de tabla entero que contiene
bla que se quiere proteger mediante una instruccion lock tabl
. Para permitir a otras aplicaciones recuperar, pero n
tualizar, borrar o insertar filas se usa
EXEC SQL
LOCK TABLE nombre_de_tabla
IN SHARE MODE
END-EXEC

. Para impedir que otras aplicaciones accedan a la tab


cualquier forma se usa
EXEC SQL
LOCK TABLE nombre_de_tabla
IN EXCLUSIVE MODE
END-EXEC
- Resource adquisition time
. USE, por defecto
indica que se quieren adquirir los locks cuando los
cios de tablas asociados sean accedidos por primera
. ALLOCATE
indica que se quieren adquirir los locks cuando se a
el plan de aplicacion
- Resource release time
. COMMIT, por defecto
indica que se quieren liberar los locks en cada punt
commit
. DEALLOCATE
indica que se quieren retener los locks hasta que te
el programa
- Explain pa h selection
. YES
se pide al DB2 informacion acerca de las decisiones
esta tomando en el establecimiento de caminos de acc
a los datos
. NO
Si cambian las caracteristicas de la tabla o vista a la que a
el programa, el plan de aplicacion ya no es valido, y el prog
no puede ser ejecutado. Cuando se intenta hacerlo, el DB2 aut
ticamente hace un rebind intentando crear un nuevo plan.

INSTRUCCIONES S.Q.L.
____________________

INSTRUCCIONES BASICAS
______________________

Las instrucciones en lenguaje S.Q.L. (Structured Query Language) p


ten comunicar peticiones de acceso a datos al DB2. Es usado por el
ministrador de la base de datos para crear y cambiar definiciones

datos, por el administrador del sistema en cuanto a autorizaciones


usuarios de los datos, y por el programador de aplicaciones para r
perar y actualizar datos.
La primera clausula de una instruccion SQL dice al DB2 que operaci
quiere realizar.
Los nombres de variables van precedidos de ':'.

CLAUSULA WHERE
______________

Especifica una condicion de busqueda que, identificara la fila o f


que se quieren recuperar, borrar o actualizar. La condicion de bus
puede estar formada por uno o varios predicados separados por AND
El DB2 primero evalua las clausulas NOT, luego AND y por ultimo OR
puede cambiar el orden de evaluacion por medio de parentesis, que
examinados primero.
Ejemplos:
. WHERE NOT WORKDEPT = 'C01'
. WHERE EMPNO = :EMPID
. WHERE JOBCODE + EDUCLVL > 70
. WHERE SEX = 'V' AND (DEPT = 'C1' OR DEPT = 'C2')

SELECT INTO
___________

Funcion
_______
Recuperar una fila especifica.

Formato
_______
EXEC SQL
SELECT nombres_de_las_columnas que nos interesan
INTO nombres_de_vbles usadas para contener los datos recupera
FROM nombre_de_la_tabla o vista que contiene los datos
WHERE condicion_de_busqueda
END-EXEC
Se pueden especificar hasta 300 columnas en la clausula SELECT. Si
quieren recuperar todas las columnas, en el mismo orden en que apa
en la fila, se pondra un asterisco, en lugar del nombre de las col
el valor de la primera columna especificada se guardara en la prim

variable especificada en la clausula INTO, el de la segunda en la


gunda, etc.
Si ninguna fila satisface la condicion, el DB2 devuelve un codigo
NOT FOUND (SQLCODE=100).
Si la clausula WHERE permitiera recuperar los valores de las colum
de dos o mas filas, DB2 devuelve un codigo de error en el SQLCODE
recupera nada.
Si varias filas cumplieran la condicion, se usara una instruccion
DECLARE CURSOR para seleccionar las filas, seguida de una instrucc
FETCH para mover los valores de las columnas a las variables una f
cada vez.

UPDATE
______

Funcion
_______
Cambiar el valor de una o mas columnas en cada fila que satisface
condicion de busqueda de la clausula WHERE. Tambien se puede usar
borrar un valor de una fila , cambiando el valor de la columna a N

Formato
_______
EXEC SQL
UPDATE nombre_de_la_tabla o vista
SET columnas que se quieren actualizar = nuevo valor
WHERE condicion_de_busqueda
END-EXEC
El nuevo valor especificado para una columna puede ser el nombre d
otra columna de la misma fila, una constante, una variable, una ex
sion aritmetica, un valor nulo, etc.
Si se omite la clausula WHERE, el DB2 actualiza cada fila de la ta
o vista con los valores dados.

DELETE
______

Funcion
_______
Quitar filas enteras de una tabla, no columnas especificas.

10

Formato
_______
EXEC SQL
DELETE
FROM nombre_de_la_tabla o vista
WHERE condicion_de_busqueda
END-EXEC
Si se omite la clausula WHERE, se borraran todas las filas de la t
bla o vista. Para borrar la definicion de una tabla, ademas de su
contenido, se usa la instruccion DROP.

INSERT
______

Funcion
_______
Añadir nuevas filas a una tabla o vista, se puede:
. Especificar los valores de las columnas que se quieren insert
. Incluir una instruccion SELECT en la INSERT para decir al DB2
los datos para la nueva fila estan contenidas en otra tabla o

Formato
_______
EXEC SQL
INSERT
INTO nombre_de_la_tabla o vista (nombres de columnas)
VALUES (valor_de_cada_columna especificada en la clausula INT
END-EXEC
Si se especifican menos nombres de columnas de los que hay en la f
el DB2 les asigna valores por defecto.
Si se intenta insertar una fila que duplica otra existente en la t
. Si la tabla tiene un indice unico, la fila no es insertada, y
DB2 proporciona un SQLCODE -803
. Si la tabla no tiene un indice unico, la fila es insertada sin

INSERCION A LA VEZ DE VARIAS FILAS DE UNA TABLA EN OTRA TABLA


_____________________________________________________________

Ejemplo:
Se crea una tabla llamada EMPTIME con las columnas EMPNUMBER,
PROYNUMBER, STARTDATE y ENDDATE, y se usa la INSERT para llenarla.

11

EXEC SQL
INSERT INTO USERA.EMPTIME
(EMPNUMBER, PROYNUMBER, STARTDATE, ENDDATE)
SELECT EMPNO, PROYNO, COMIENZO, FIN
FROM DSN.EMP
END-EXEC
En una SELECT embebida en una INSERT no se puede poner UNION ni OR
El numero de columnas de la SELECT debe ser el mismo de la INSERT.
datos que se seleccionan deben ser compatibles con las columnas en
que se van a insertar. Para las columnas que no se especifiquen se
sertaran los valores por defecto establecidos cuando se creo la ta
Cuando se inserta una fila en una vista, si esta no contiene todas
columnas de la tabla base, el DB2 inserta en ellas valores por def

FUNCIONES DEL CURSOR


____________________
El cursor permite a un programa recuperar un conjunto de filas, y
procesar una fila cada vez.
El DB2 construye una 'tabla de resultados' para guardar todas las
recuperadas al ejecutar una instruccion SELECT, y utiliza el curso
hacerlas disponibles al programa. Un cursor identifica la fila act
de la tabla de resultados, que el programa puede recuperar secuenc
mente hasta que alcanza el fin de los datos ( SQLCODE=100, NOT FOU
Un programa puede utilizar varios cursores, para cada uno de ellos
utilizan las siguientes instrucciones:

DECLARE CURSOR
______________

Funcion
_______
Se usa para definir e identificar un conjunto de filas que van a s
accedidas con un cursor.

Formato
_______
EXEC SQL
DECLARE nombre_del_cursor
CURSOR FOR SELECT columna 1, columna 2 .....
FROM nombre_de_la_tabla
WHERE columna 1 = condicion_de_busqueda
FOR UPDATE OF columna 2 ...(columnas de cada fila que se
quieren actualizar)
END-EXEC

12

La instruccion DECLARE CURSOR nombra un cursor. La instruccion SEL


define un conjunto de filas, que formaran la tabla de resultados.
Es posible actualizar una columna de la tabla identificada aunque
sea parte de la tabla de resultados (que no haya sido nombrada en
instruccion SELECT), nombrandola en la clausula FOR UPDATE OF.
Cuando DB2 evalua una instruccion SELECT, puede ocurrir que varias
satisfagan la condicion de busqueda, y que algunas de ellas esten
dadas. Para especificar que no se desean, se codificara:
SELECT DISTINCT columna 1, columna 2, .....

OPEN
____
Funcion
_______
Le dice al DB2 que se esta preparado para procesar la primera fila
la tabla de resultados.

Formato
_______
EXEC SQL
OPEN nombre_del_cursor
END-EXEC

FETCH
_____

Funcion
_______
Mover a las variables del programa el contenido de la fila selecci

Formato
_______
EXEC SQL
FETCH nombre_del_cursor
INTO variable 1, variable 2 ....
END-EXEC
Cuando se utiliza la instruccion FETCH, el DB2 usa el cursor para
tar a la siquiente fila de la tabla de resultados.

13

WHENEVER NOT FOUND


__________________

Funcion
_______
Para detectar que ya no tenemos mas filas para procesar se puede:
. Examinar si el SQLCODE tiene valor 100, esto ocurre cuando una
truccion FETCH ha recuperado la ultima fila de la tabla de res
dos y se da otra FETCH. Ejemplo: IF SQLCODE = 100 GO TO NO-DAT
. Codificar la instruccion WHENEVER NOT FOUND bifurcando a otra
del programa.
Formato
_______
EXEC SQL
WHENEVER NOT FOUND GO TO direccion_simbolica
END-EXEC

UPDATE
______

Funcion
_______
Una vez que se ha recuperado la fila actual, se puede actualizar e
con UPDATE.

Formato
_______
EXEC SQL
UPDATE nombre_de_la_tabla
SET columna 1 = valor , columna 2 = valor ....
WHERE CURRENT OF nombre_del_cursor
END-EXEC
Cada columna que se quiere actualizar debe haber sido nombrada pre
mente en la clausula FOR UPDATE OF de la instruccion DECLARE CURSO
La clausula WHERE identifica el cursor que apunta a la fila que va
ser actualizada. Despues de actualizar una fila, la posicion del c
permanece en esa fila hasta que se utilice una instruccion FETCH p
la siguiente fila.
Con la instruccion UPDATE se actualizan varias filas con una sola
truccion SQL, mientras que UPDATE ... WHERE CURRENT OF, permite ob
una copia de la fila, examinarla, y entonces, actualizarla.

14

DELETE
______

Funcion
_______
Una vez que se ha recuperado la fila actual, se puede borrar con D

Formato
_______
EXEC SQL
DELETE FROM nombre_de_la_tabla
WHERE CURRENT OF nombre_del_cursor
END-EXEC
La clausula WHERE identifica el cursor que apunta a la fila que va
borrada. Despues de borrar una fila, no se puede actualizar o borr
utilizando ese cursor, hasta que se de una FETCH para la siguiente
Con la instruccion DELETE se borran varias filas con una sola inst
ccion SQL, mientras que DELETE ... WHERE CURRENT OF, permite obten
una copia de la fila, examinarla, y entonces, borrarla.

CLOSE
_____

Funcion
_______
Cerrar el cursor una vez que se ha terminado de procesar las filas
la tabla de resultados si se quiere volver a utilizarlo. El DB2 ci
el cursor automaticamente cuando termina el programa.

Formato
_______
EXEC SQL
CLOSE nombre_del_cursor
END-EXEC
Si el programa completa una unidad de recuperacion todos los curso
abiertos son cerrados automaticamente por el DB2. Si el cursor se
ve a abrir, el proceso comenzara al principio de la tabla de resul
y se tendra que restablecer la posicion del cursor.
Ejemplo:
Supongamos que se quieren actualizar los datos de los empleados de
tabla DSN.EMPL dando un SYNCPOINT cada 100 filas.

15

1. Declarar el cursor como conjunto de filas de EMPNO > UPD-EMP


EXEC SQL (valor actual
DECLARE EMPLEADO CURSOR FOR del limite
SELECT EMPNO, SALARY mas bajo)
FROM DSN.EMPL
WHERE EMPNO > :UPD-EMP
ORDER BY EMPNO
END-EXEC

2. Abrir el cursor y mover los datos de la tabla de resultados


fila cada vez, de forma que el limite mas bajo de la tabla s
tualiza en UPD-EMP.
EXEC SQL : EXEC SQL
OPEN EMPLEADO : FETCH EMPLEADO
END-EXEC : INTO :UPD-EMP, :UPD-SAL
: END-EXEC

3. Borrar una fila


EXEC SQL
DELETE FROM DSN.EMPL
WHERE EMNO = :UPD-EMP
END-EXEC

4. Al abrir el cursor de nuevo, la condicion de busqueda de la


procesara la DSN.EMPL basandose en el valor actual de UPD-EM

OPCIONES DE LA INSTRUCCION SELECT


_________________________________

OPERACIONES ARITMETICAS
_______________________

La instruccion SELECT se puede usar para realizar operaciones arit


cas con los datos antes de que sean proporcionados al programa. Es
consigue mediante operadores aritmeticos en la lista de columnas.
SELECT JOBCODE + 10 . . .
Los operadores aritmeticos se pueden usar con columnas de datos de
dos como INTEGER, SMALLINT, DECIMAL, o FLOAT, con constantes numer
y variables.
El valor de la expresion aritmetica se asigna a una variable, pero
reemplaza al valor de la columna de la tabla o vista.

16

FUNCIONES BUILT-IN
__________________

Permiten obtener informacion acerca de las filas que satisfacen la


dicion de busqueda. Se puede incluir mas de una en cada instruccio
LECT. La funcion BUILT-IN se aplica a cada fila que satisface la c
cion de busqueda, ignorando los valores nulos.
AVG
___

Promedio de los valores de una o mas columnas que contengan datos


ricos.

MAX
___

Maximo valor de una o mas columnas.

MIN
___

Minimo valor de una o mas columnas.

SUM
___

Suma del valor de una o mas columnas.

COUNT
_____

. Numero de filas que satisfacen la condicion de busqueda:


EXEC SQL
SELECT COUNT(*)
INTO EMP-COUNT
FROM DSN-EMP
WHERE JOBCODE >= 50
END-EXEC

17

. Numero de valores unicos de una columna en particular:


EXEC SQL
SELECT COUNT (DISTINCT DEPTNO)
INTO DST-COUNT
FROM DSN-EMP
END-EXEC
CLAUSULAS GROUP BY, HAVING Y ORDER BY
_____________________________________

No se pueden especificar en una instruccion SELECT dentro de la DE


CURSOR, cuando se pretenda actualizar una columna o borrar una fil

GROUP BY
________

Divide las filas que satisfacen la condicion de busqueda en grupos


gun una o mas columnas especificadas en esta clausula. El resultad
la aplicacion de una funcion BUILT-IN, no sera ya un valor unico,
tantos valores como grupos. Si hay valores nulos en una columna es
ficada en GROUP BY, el DB2 los considera en un grupo por separado.
Ejemplo:
Calculo del salario medio por departamento el resultado sera una
por departamento al no especificar WHERE, se procesan todas las fi
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT WORKDEPT, AVG(SALARY)
FROM DSN-EMP
GROUP BY WORKDEPT
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :WORK-DEPT, :AVG-SALARY
END-EXEC
Es posible agrupar por mas de una columna.
Ejemplo:
Calculo del salario medio por departamento y por sexo. El resultad
seran dos filas por departamento (una por cada sexo), para las cua
se calculara el promedio.

18

EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT WORKDEPT, SEX, AVG(SALARY)
FROM DSN-EMP
GROUP BY WORKDEPT, SEX
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :WORK-DEPT, :SEX, :AVG-SALARY
END-EXEC

HAVING
______

Se usa seguida de la clausula GROUP BY, para especificar que solo


desean los grupos que satisfagan una condicion.
Se codifica como la clausula WHERE, pudiendo contener predicados m
ples, la clausula DISTINCT, HAVING NOT, y funciones BUILT-IN.
Ejemplo:
Calculo del salario medio de las mujeres por departamento, pero so
para los departamentos en los que todos los empleados poseen un ni
de educacion igual o superior a 16.
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT WORKDEPT, AVG(SALARY), MIN(EDUCL
FROM DSN-EMP
WHERE SEX = 'F'
GROUP BY WORKDEPT
HAVING MIN(EDUCLVL) >= 16
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :WORK-DEPT, :AVG-SALARY, :MIN-EDUC
END-EXEC

ORDER BY
________

Indica el orden en el que se quieren recuperar las filas, el cual


especifica mediante el nombre de la columna o columnas, o un numer
(ORDER BY 3 especifica que se quiere ordenar por la tercera column
de la tabla de resultados) cuando en la SELECT no se ha especifica
un nombre de columna sino una expresion aritmetida, funcion BUILT-
etc.

19

Todas las columnas de la claurula ORDER BY se han de haber especif


en la SELECT.
Por defecto se toma orden ascendente. Si se encuentran valores nul
son tratados como los mas altos. Los caracteres graficos se ordena
en secuencia EBCDIC.
Se pueden especificar secuencias de orden secundarias.
Ejemplo:
Recuperar el nombre y numero de departamento de las mujeres emplea
ordenado por numero de departamento descendente, y dentro de c
departamento por nombre de empleado.
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNAME, WORKDEPT
FROM DSN-EMP
WHERE SEX = 'F'
ORDER BY WORKDEPT DESC, EMPNAME
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :PGM-NAME, :WORK-DEPT
END-EXEC

UNION
_____

Permite combinar dos o mas instrucciones SELECT para formar una un


tabla de resultados, eliminando las filas duplicadas. Se usa para
clar valores de varias tablas, pero el conjunto de filas seleccion
de una tabla es añadido al conjunto de filas seleccionado de otra.
Los tipos de datos y longitudes de las columnas nombradas en la in
ccion SELECT deben ser identicos. Por ejemplo, SELECT A, B UNION X
la columna A debe ser identica a la X, y la columna B a la Y.
Para especificar las columnas por las que se quiere ordenar se deb
usar numeros, y nunca nombres de columnas.
Para identificar de que instruccion SELECT procede cada fila, se i
ye una constante al final de la lista de cada SELECT.
SELECT A, B, 'A1' UNION X, Y, 'B1'
El DB2 devolvera la constante correspondiente a cada instruccion S
en la ultima columna de la fila.

20
Ejemplo:
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNO
FROM DSN.EMP1
WHERE WORKDEPT = :WORK-DEPT
UNION
SELECT DISTINCT EMPNO
FROM DSN-EMP2
WHERE PROJNO = :NUM-PROY
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER
END-EXEC

SELECCION DE DATOS DE VARIAS TABLAS EN UNA FILA (JOIN)


______________________________________________________

Es posible formar una fila de la tabla de resultados para la cual


parte de las columnas procedieran de una tabla, y otra parte de ot
Si coinciden los nombres de columna de dos tablas, habra que calif
los, poniendo como prefijo el nombre de la tabla.
En la instruccion SELECT se listan los nombres de las columnas que
quieren. Si en su lugar se coloca un *, el DB2 devuelve una fila f
da por todas las columnas de la primera fila, unido a todas las de
segunda.
Si no se especifica la clausula WHERE cada fila de la primera tabl
concatenada a cada fila de la segunda tabla para formar una tabla
resultados, cuyo numero de filas sera el producto del numero de fi
de cada tabla.
Ejemplo:
A=3 B=2 AB=6
Este metodo se puede usar para crear una vista, pero esta no puede
procesada mediante instrucciones UPDATE, DELETE o INSERT.
Es posible unir una tabla o vista consigo misma, y hasta 7 tablas.
Ei se usa la clausula GROUP BY en la definicion de una vista, la v
no puede ser unida con otra tabla.
Ejemplo:
Queremos recuperar las columnas EMPNO y LASTNAME de la tabla DSN.E
y las columnas ACTNUM y EMPTIME de la DSN.EMP2.

21
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMP1.EMPNO, LASTNAME, ACTNUM, EMPTI
FROM DSN.EMP1, DSN-EMP2
WHERE EMP1.EMPNO = EMP2.EMPNO
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :ACTIV, :TIME
END-EXEC

OPCIONES DE LAS CONDICIONES DE BUSQUEDA


_______________________________________

Todas ellas se pueden codificar con NOT.

BETWEEN ... AND


_______________

Especifica que la condicion debe ser satisfecha por cualquier valo


este comprendido entre los dos valores especificados.
WHERE EDUCLVL BETWEEN 13 AND 16

IN
__

Indica que se esta interesado en las filas para las que el valor d
columna especificada esta entre los valores que se listan.
WHERE WORKDEPT IN ('A00', 'C01', 'E02')

LIKE
____

Indica que se esta interesado en las filas para las que el valor d
columna especificada es similar al que se proporciona. El grado de
recido es determinado por dos caracteres especiales usados en la c
que se incluye en la condicion de busqueda:
22

. Un '_' para cualquier caracter simple


. Un '%' para una cadena de caracteres. A no ser que el % prece
la cadena de caracteres, la cadena buscada puede comenzar en
quier parte de la columna
Se usan cuando no se conocen todos los caracteres de una columna o
importa su contenido.
Ejemplo:
. Para encontrar todos los empleados que viven en San Jose, debemo
tar seguros de que San Jose no es parte del nombre de otra ciuda
porque el DB2 nos devolveria tambien esa fila.
WHERE TOWN LIKE '%SAN JOSE%'
. Para encontrar todos los empleados que viven en ciudades que com
den por SAN.
WHERE TOWN LIKE 'SAN%'

IS NULL
_______

Indica que se esta interesado en las filas para las que el valor d
columna especificada es nulo.
WHERE CODIGO IS NULL
Para indicar que se esta interesado en las filas para las que el v
de la columna especificada es blancos.
WHERE CODIGO = ' '

VISTAS
______

CONCEPTO
________

Una vista no contiene datos. Es una definicion almacenada de un co


to de filas y columnas. Cuando un programa accede a los datos defi
por una vista, el DB2 procesa la definicion de la vista. El result
es un conjunto de filas a las que el programa puede acceder median
instrucciones SQL.
23

Una vista es como una ventana a traves de la cual un programa pued


acceder solo a los datos que necesita. Las vistas se pueden usar i
cambiablemente con las tablas cuando se recuperan datos, y pueden
varse de una o mas tablas. Puede tener nombres de columnas diferen
de los nombres de las tablas.
Las funciones de una vista son:
- Seguridad: No permitir el acceso de algunos usuarios a todos lo
datos de una tabla.
- Hacer disponible a una aplicacion un subconjunto de una tabla,
lo cual es mas facil codificar instrucciones SQL ya que solo se
las columnas y filas de una tabla que se necesitan.
Una vista basada en una tabla de empleados puede contener filas
para un determinado departamento.
- Resumir datos de una tabla y hacerlos disponibles:
. La suma de valores de una columna
. El maximo valor de una columna
. El promedio de valores de una columna
. El resultado de una expresion aritmetica con una o m
columnas
Cuando se actualizan los datos de una vista, se actualizan los dat
de la tabla de la que se deriva, y, al contrario, si los datos de
tabla cambian, los datos accesibles a traves de vistas basadas en
tabla tambien cambian.

PROCESO DE UNA VISTA


____________________

Una vista se puede crear via SPUFI.


Para insertar una fila en una tabla por medio de una vista, la fil
debe tener un valor para cada columna de la tabla que no posee un
valor por defecto.
Si se crea una vista usando funciones BUILT-IN o las clausulas DIS
o GROUP BY, solamente es posible usar la instruccion SELECT para e
Si una columna de una vista es definida por medio de una expresion
metica, no se podra actualizar la columna o insertar filas en la v
Si se crea una vista especificando 'WITH CHECK OPTION', todas las
ciones y actualizaciones contra la vista son chequeadas antes para
probar que la fila esta conforme con la definicion de la vista.
Si la vista es resultado de un JOIN, los datos de esta pueden ser
seleccionados, pero no se puede insertar, borrar o actualizar.
24

No se puede crear un indice para una vista.


Si la instruccion SELECT usada para crear una vista contiene un *
lugar de una lista de columnas, y mas tarde alguien añade otra col
a la tabla en la cual se basa la vista, la nueva columna no aparec
en la vista a menos que la vista sea creada de nuevo.

SUBQUERY
________

En una SELECT anidada en otra SELECT la primera se llama SELECT


OUTER-LEVEL, y la interna SUBQUERY.
Cuando se usa una SUBQUERY el DB2 la evalua, y sustituye el valor
resulta de ella en la clausula WHERE o HAVING de nivel superior, y
puede existir una SUBQUERY dentro de otra, hasta cinco, e incluso,
de haber varias condiciones de busqueda conectadas por operadores
cionales, cada una con SUBQUERYS.
La instruccion SELECT de una SUBQUERY solo puede especificar 1 col
1 funcion BUILT-IN o 1 expresion aritmetica.
Una SUBQUERY no puede contener una clausula ORDER BY.
Cuando la instruccion de nivel superior es otra SELECT:
. La SUBQUERY puede basarse en la misma tabla o vista o en otra
. Se puede usar una SUBQUERY en una instruccion WHERE incluso s
SELECT es parte de una DECLARE CURSOR, INSERT o CREATE VIEW.
Cuando la instruccion de nivel superior es UPDATE o DELETE la SUBQ
no puede basarse en la misma tabla o vista.

FORMAS DE INCLUIR UNA SUBQUERY EN UNA CLAUSULA WHERE O HAVING


_____________________________________________________________

1) Inmediatamente despues de un operador de comparacion


____________________________________________________

EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNO, LASTNAME, JOBCODE
FROM DSN.EMP1
WHERE EDUCLEVEL >
(SELECT AVG (EDUCLEVEL)
FROM DSN.EMP2
END-EXEC

25

.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :CODE
END-EXEC

2) Despues de un operador de comparacion seguido de:


________________________________________________

. ALL, para indicar que el valor proporcionado debe ser compara


una determinada forma con todos los valores que devuelva la S
RY.
Ej: WHERE EXPRESION > ALL SUBQUERY
para satisfacer la WHERE, el valor de la expresion de
ser mayor que todos los valores devueltos por la SUBQ
Si la SUBQUERY no selecciona ningun valor la condicio
satisfecha.
. ANY, para indicar que el valor proporcionado debe ser compara
una determinada forma con cualquiera de los valores que devue
la SUBQUERY.
Ej: WHERE EXPRESION > ANY SUBQUERY

3) Despues de IN, para indicar que el valor de la expresion debe e


_______________________________________________________________
entre los valores devueltos por la SUBQUERY.
___________________________________________

Ejemplo:
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNO, LASTNAME, JOBCODE
FROM DSN.EMP1
WHERE EMPNO IN
(SELECT DISTINCT EMPNO
FROM DSN.EMP2
WHERE PROYNO = 'M1')
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :CODE
END-EXEC

26

4) Despues de EXISTS para verificar que al menos puede ser encontr


_______________________________________________________________
una fila que cumpla la condicion de la SUBQUERY.
_______________________________________________

Ejemplo:
WHERE EXISTS SUBQUERY
No es necesario especificar nombres de columna en la SELECT, sin
ya que la SUBQUERY no va a devolver datos.

SUBQUERY CORRELATIVA
____________________

En una SUBQUERY normal, el DB2 ejecuta la SUBQUERY una vez, sustit


el resultado en la parte derecha de la condicion de busqueda, y ev
la SELECT de nivel superior segun el valor de la condicion de busq
Una SUBQUERY correlativa se ejecuta una vez para cada fila de la t
o vista mencionada en la SELECT de nivel superior, de forma que se
lua la SUBQUERY para cada fila.
Se usa para calcular algun valor que puede ser diferente para cada
Es igual que una normal excepto porque despues de especificar el n
de la tabla en la clausula FROM, proporcionamos un nombre de corre
cion, variable que representa la fila actual. Para especificar la
lacion se prefija el nombre de columna con un nombre de correlacio

OTROS EJEMPLOS
______________

Con UPDATE o SELECT, la SUBQUERY y la instruccion de nivel super


deben referirse a diferente tabla.
En una INSERT, ni la SUBQUERY ni la SELECT de nivel superior den
de la INSERT, pueden basarse en la misma tabla en la que se inse

. Con una SELECT


______________
Esta SELECT recuperara las columnas especificadas para cada empl
cuyo JOBCODE es superior a la media de su departamento.

27

EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNO, LASTNAME, WORKDEPT, JOBCODE
FROM DSN.EMP ESTAFILA
WHERE JOBCODE >
(SELECT AVG (JOBCODE)
FROM DSN.EMP
WHERE WORKDEPT = ESTAFILA.WORKDE
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :DEPT, :CODE
END-EXEC

. Con una UPDATE


______________
EXEC SQL
UPDATE DSN.EMP1 ESTAFILA
SET DATE = 9999
WHERE 840901 >
(SELECT MAX (ENDATE)
FROM DSN.EMP2
WHERE PROJNO = ESTAFILA.PROJNO)
END-EXEC

. Con una DELETE


______________
EXEC SQL
DELETE FROM DSN.EMP1 ESTAFILA
WHERE NON EXISTS
(SELECT *
FROM DSN.EMP2
WHERE PROJNO = ESTAFILA.PROJNO)
END-EXEC
SPUFI
_____

SPUFI (SQL PROCESSOR USING FILE INPUT) permite:

- Crear y probar instrucciones SQL antes de incluirlas en un progr


________________________________

28

- Creacion de una tabla


_____________________
CREATE TABLE TEMPL
(EMPNO CHAR(6) NOT NULL,
WORKDEPT CHAR(3) NOT NULL,
JOBCODE DECIMAL(3) )
IN TESTTAB.DSN77EMP;

- Creacion de una vista


_____________________
La instruccion CREATE VIEW se usa para establecer la definicion
vista. La vista se crea cada vez que es referenciada por una ins
ccion SQL.
CREATE VIEW EMPDATA AS
SELECT *
FROM DSN.EMP
WHERE WORKDEPT = 'C1'

- Crear un nombre alternativo o sinonimo para una tabla o vista


_____________________________________________________________
CREATE SYNONIM MITABLA FOR DSN.TABEMPL

y dar de baja ese sinonimo.


___________________________
DROP SYNONIM MITABLA

PANELES
_______
1) Panel Principal
_______________

. Especificar un fichero de entrada,


_________________________________ que contiene las instrucc
SQL que se quieren ejecutar, cuya longitud de registro sera
. Especificar un fichero de salida
_________________________________, que recoge cada instrucci
el resultado de la ejecucion, que seran los datos recuperado
una SELECT, o un SQLCODE en otras. Tambien incluye estadisti

29

. Especificar las opciones de proceso


___________________________________ (YES por defecto)
- CHANGE DEFAULTS: Poniendo YES se accede al panel de opcio
por defecto.
- EDIT INPUT: Editar o no el fichero de entrada.
- EXECUTE: Ejecutar o no las instrucciones del fichero de e
- AUTOCOMMIT: Dar o no un punto de COMMIT.
- BROWSE OUTPUT: Displayar o no el fichero de salida.

2) Panel de opciones por defecto.


_____________________________

. Especificar otras opciones de proceso


_____________________________________
- ISOLATION LEVEL: Por defecto RR.
RR (REPEATABLE READ), garantiza que los valores de la
de datos leidos o cambiados por SPUFI no pueden se
biados por otro programa hasta que SPUFI alcance u
to de COMMIT.
CS (CURSOR STABILITY), garantiza que ningun programa p
modificar los datos de una fila en la cual SPUFI t
posicionado un cursor. Esto proporciona maxima con
rrencia.
- MAX SELECT LINES: Por defecto 250.
Maximo numero de filas que devolvera una SELECT.

. Definir caracteristicas del fichero de salida


_____________________________________________
- RECORD LENGTH: Por defecto 4092.
No puede ser menor que la del fichero de entrada.
- BLOCK SIZE: Por defecto 4096.
- RECORD FORMAT: Por defecto VB.
- DEVICE TYPE: Por defecto SYSDA.

30

. Especificar defectos para el formato de salida


______________________________________________

- MAX NUMERIC FIELD: Por defecto 20.


Anchura maxima para campos numericos.
- MAX CHAR FIELD: Por defecto 80.
Anchura maxima para campos de caracteres.
- COLUMN HEADING: Por defecto NAMES.
NAMES
LABELS
ANY
BOTH

3) PANEL COMMIT/ROLLBACK
_____________________

Si en el panel principal se especifica NO para AUTOCOMMIT, una


que se completa la ejecucion se displaya este panel, en el que
indicara una de estas opciones:
. COMMIT: Salvar los cambios en la base de datos.
. ROLLBACK : Borrar los cambios en la base de datos.
. DEFER

RESTRICCIONES
_____________

Se pueden usar todas las instrucciones excepto:


CLOSE EXECUTE OPEN
DECLARE FETCH PREPARE
DESCRIBE INCLUDE WHENEVER
Las opciones no soportadas por spufi son:
. INTO en la SELECT
. WHERE CURRENT en la UPDATE y DELETE

31

CODIFICACION DE INSTRUCCIONES SQL EN UN PROGRAMA COBOL


______________________________________________________

1) Definir un area de comunicacion llamada SQLCA


_____________________________________________

Es un area de datos en la cual el DB2 devuelve informacion acer


del resultado de la ejecucion de cada instruccion SQL.
WORKING-STORAGE SECTION
EXEC SQL
INCLUDE SQLCA
END-EXEC
Con esta instruccion el precompilador incluira:
01 SQLCA.
05 SQLCAID PIC X(8).
05 SQLCABC PIC S9(9) COMP.
05 SQLCODE PIC S9(9) COMP.
05 SQLERRM.
49 SQLERRML PIC S9(4) COMP.
49 SQLERRMC PIC X(70).
05 SQLERRP PIC X(8).
05 SQLERRD OCCURS 6 TIMES PIC S9(9) COMP.
05 SQLWARN.
10 SQLWARN0 PIC X(1).
10 SQLWARN1 PIC X(1).
10 SQLWARN2 PIC X(1).
10 SQLWARN3 PIC X(1).
10 SQLWARN4 PIC X(1).
10 SQLWARN5 PIC X(1).
10 SQLWARN6 PIC X(1).
10 SQLWARN7 PIC X(1).
05 SQLEXT PIC X(8).

2) Describir cada tabla o vista a la que acceda el programa


________________________________________________________

Esto puede hacerse de dos formas:


. Codificando una instruccion DECLARE en la data division, espe
cando nombre de la tabla y listando cada columna y su tipo de
EXEC SQL
DECLARE DSN.TDEPT TABLE
(DEPNUM CHAR(3) NOT NULL,
DEPNOM VARCHAR(36) NOT NULL)
END-EXEC

32

. Previamente a la precompilacion con el DCLGEN.


Para incluir en el programa las declaraciones producidas por
EXEC SQL
INCLUDE nombre_del_miembro
END-EXEC

3) Codificar instrucciones SQL


___________________________

Cada instruccion comienza con EXEC SQL y termina con END-EXEC.


En lugar de instrucciones COPY se codificara INCLUDE.
No se pueden usar nombres de variables que comiencen por SQL, n
nombres de entradas externas o de plan que comiencen por DSN, y
que estan reservados para el DB2.
No se pueden usar constantes figurativas como ZERO o SPACE en i
cciones SQL.

VARIABLES Y ESTRUCTURAS HOST


____________________________

Las variables HOST son campos de datos, definidos en el program


la WORKING STORAGE o en la LINKAGE SECTION, y especificados en
opcion INTO de una instruccion SELECT o FETCH, en los cuales se
los valores de los datos recuperados por el DB2. Las variables
se codifican en las instrucciones SQL precedidas por dos puntos
Una estructura HOST es un conjunto de variables HOST definidas
DATA DIVISION del programa. Puede tener un maximo de dos nivele
cepto la declaracion de una cadena de caracteres de longitud va
que requiere un numero de nivel 49. Para identificar un campo d
de una estructura en una instruccion SQL se codificara el nombr
estructura seguido de un punto y el nombre del campo.
La parte entera de un numero nunca es truncada, si un numero no
en una variable o en una columna, se trunca la parte decimal si
ne y si no da un error.
La declaracion de variables HOST se hace en niveles 01 o 77 (la
nivel 77 no pueden ser usadas en instrucciones SQL).
Una cadena de caracteres de longitud variable debe tener un niv
01 a 48, y contener dos campos elementales a nivel 49:
. Campo de longitud PIC S9(4) COMP.
. Campo de valor PIC X(80). (Como maximo).

33

VARIABLES INDICADOR
___________________

Una variable indicador es un entero de media palabra.


La variable indicador se especifica precedida de dos puntos inm
tamente despues de la variable HOST.
Ejemplo:
EXEC SQL
SELECT TELFNUM
INTO :TELEF:INDNULL
FROM DSN.TABEMPL
WHERE EMPNO = :EMPID
END-EXEC
Se usa para:

. Indicar si ha sido asignado un valor nulo a su variable asociad


_______________________________________________________________
Si el valor de la columna que se esta recuperando es nulo el DB
ne un valor negativo en la variable indicador ( si no se usara
daria un error), y el valor de la variable HOST no se alterara.

. Verificar que una cadena de caracteres recuperada no ha sido tr


_______________________________________________________________
Si la variable indicador contiene un entero positivo, este espe
la longitud original de la cadena.

. Colocar un valor nulo en una columna


____________________________________
Cuando se procesa una instruccion UPDATE el DB2 chequea la vari
indicador. Si esta contiene un valor negativo, el valor de la c
na se pondra como nulo. Si contiene un valor mayor que -1 la va
ble asociada contiene un valor para la columna.

4) MANEJO DE CODIGOS DE RETORNO DE ERRORES : LA SQLCA


__________________________________________________

SQLCAID
_______

Cadena de caracteres (long 8) que identifica la SQLCA (valor 'S

34

SQLCABC
_______

Entero de una palabra que especifica la longitud de la SQLCA. S


lor es siempre 136 (X'88').

SQLCODE
_______

Es un entero de una palabra. Puede tener los siguientes valores


ZERO la instruccion se ha ejecutado correctamente
-n ha ocurrido un error
+n la instruccion se ha ejecutado correctamente pero ha ocurri-
do una condicion excepcional
+100 no existen datos para procesar

SQLERRM
_______

Cadena de caracteres de longitud variable (maximo 70) que descr


una condicion de error.

SQLERRD
_______
SQLERRD(3) indica el numero de filas insertadas, actualizadas o
borradas en una tabla.

SQLWARN0
________

Si es blanco, el resto de las variables SQLWARN tambien lo es.


otra forma sera W, y al menos otra SQLWARN sera tambien W.

35

SQLWARN1
________

Si es W al menos el valor de una columna ha sido truncado al al


narlo en una variable HOST.

SQLWARN2
________

Si es W al menos un valor nulo ha sido eliminado de el conjunto


argumentos de una funcion.

SQLWARN3
________

Si es W el numero de variables HOST especificado en una instruc


SQL es distINTO del numero de columnas en la tabla o vista.

SQLWARN4
________

Si es W una UPDATE o DELETE dinamica no incluye una clausula WH

5) MANEJO DE CONDICIONES EXCEPCIONALES: INSTRUCCION WHENEVER


_________________________________________________________

Hace que el DB2 chequee la SQLCA y continue procesando el progr


o bifurque a otra area del programa si encuentra un error. Pued
tablecerse mas de una WHENEVER para una misma condicion a lo la
del programa, de forma que una WHENEVER afecta a todas las inst
cciones SQL siguientes hasta que se encuentre otra.
Ejemplo:
EXEC SQL
WHENEVER CONDICION ACCION
END-EXEC

36

Se pueden especificar tres condiciones:


______________________________________

. SQLWARNING indica que se quiere hacer cuando SQLWARN0 = W o SQ


contiene un valor positivo distinto de 100.
. SQLERROR indica que se quiere hacer cuando SQLCODE < 0
. NOT FOUND indica que se quiere hacer cuando el DB2 no puede en
trar una fila que satisfaga la instruccion SQL o cuando no hay
filas para hacer una fetch (SQLCODE=100)

Se pueden especificar dos acciones:


__________________________________

. CONTINUE el programa continua su ejecucion.


. GO TO el programa bifurca a otra area del programa, cuyo nom
bre ira precedido de dos puntos.

SUGERENCIAS PARA LA CODIFICACION DE INSTRUCCIONES SQL


_____________________________________________________

Para facilitar el uso de indices por el DB2


___________________________________________
. Usar BETWEEN en lugar de >= AND <=
. Evitar conversiones numericas especificando los mismos tipos de
tos en las comparaciones, y usar datos de la misma longitud
. Evitar el uso de predicados con LIKE que comiencen por '%' o '_
. Evitar expresiones aritmeticas en un predicado

Para facilitar la seleccion de datos de dos o mas tablas


________________________________________________________
. Proporcionar datos redundantes en las JOIN de tablas
. Usar JOIN en lugar de SUBQUERYS correlativas o de SUBQUERYS con

37

NOTAS SOBRE DB2 / SQL.


_____________________

- DECLARE CURSOR.
Esta sentencia SQL no actualiza el SQLCODE.

- SQLCODE = 100.
Si se declara un cursor para la SELECT y no hay filas que satis
las condiciones de busqueda el DB2 nos devuelve un SQLCODE = 10
en la primera FETCH que se haga.

- SELECT SUM(COLUMNA) EN COBOL:


Si no se efectuo la suma -no existen filas para las condiciones
busqueda- el valor que se devuelve en el campo resultado de la
suma sera nulos y en determinados casos se produce un SQL = -30
Conclusion: Preveerlo en cobol utilizando indicador variable
que devolvera valor negativo si el campo al que est
asociado contien valores nulos.

NOTA: En CSP el campo que recoge la suma queda a ceros


y el SQLCODE devuelve ceros.

APENDICE I
__________

EJEMPLOS DE INSTRUCIONES SQL EN COBOL II


________________________________________
DISTINCT
________

*----------------------------------------------------------------*
* LEER TABLA DE ALTAS DE CLIENTE. *
*----------------------------------------------------------------*
BUSCA-ALTAS.
MOVE TVACLTEA TO CVANORAA-A
EXEC SQL
SELECT DISTINCT CVANORAA, CVANCTAA
INTO :CVANORAA-A, :CVANCTAA-A
FROM FVAORALV
WHERE CVANORAA = :CVANORAA-A
END-EXEC.

38

COUNT
_____

*----------------------------------------------------------------*
*CUENTA EL NUMERO DE DOMICILIACIONES DE UNA ENTIDAD EMISORA *
*----------------------------------------------------------------*
CUENTA-DOMICILI.
EXEC SQL
SELECT
COUNT (*)
INTO :CDOIMPOP-M
FROM FDOMAESV
WHERE CDOEMISA = :CDOEMISA-M
END-EXEC.

SUM
___

*----------------------------------------------------------------*
*SUMA EL CONTENIDO DEL CAMPO CVANTITP *
*----------------------------------------------------------------*
77 IND-NULL PIC S9(4) COMP VALUE 0.
SELECT2-FVAORBCV.
MOVE 0 TO IND-NULL CVANTITP-C SQLCODE.
EXEC SQL
SELECT SUM(CVANTITP)
INTO :CVANTITP-C :IND-NULL
FROM FVAORBCV
WHERE CVAENTIA = :WS-ENTI-DEPOS-1234 AND
CVACLTEA = :CVACLTEA-C AND
CVAPIVAA = :CVAPIVAA-C AND
CVAOBSTA = '03' AND
CVATIOPA = '5'
END-EXEC.
IF SQLCODE = NOENCONTRADO OR IND-NULL < 0
THEN . . .

39

UNION
_____

*------------------------------------------------------*
* SELECCIONAR DE CARTERAS LA SUMA DE TITULOS QUE EL *
* CLIENTE POSEE DE LA CLAVE VALOR AMPLIACION Y QUE *
* ESTEN EN SITUACION '0' O '1'. *
* SE RECUPERARA UN FILA POR CADA DISTINTO CLTE EN CADA*
* CARTERA. *
*------------------------------------------------------*
DECLARE-CURSOR1.
MOVE CORRECTO TO SQLCODE.
EXEC SQL
DECLARE CURSOR1 CURSOR FOR
SELECT
D.CVACLICA, SUM(CVAUNUMP - CVAPNUMP + 1)
FROM
FVACARTV D
WHERE
(D.CVAENTIA = :W-ENTIDAD AND
D.CVACLANA >= :WS-CVACLA00 AND
D.CVACLANA <= :WS-CVACLA19 OR
D.CVAENTIA = :W-ENTIDAD AND
D.CVACLANA >= :WS-CVACLA40 AND
D.CVACLANA <= :WS-CVACLA59) AND
D.CVASITIA IN('0', '1')
GROUP BY
D.CVACLICA
UNION ALL
SELECT
P.CVACLICA, SUM(CVANTITP)
FROM
FVACAPRV P
WHERE
(P.CVAENTIA = :W-ENTIDAD AND
P.CVACLANA >= :WS-CVACLA00 AND
P.CVACLANA <= :WS-CVACLA19 OR
P.CVAENTIA = :W-ENTIDAD AND
P.CVACLANA >= :WS-CVACLA40 AND
P.CVACLANA <= :WS-CVACLA59) AND
P.CVASITIA IN('0', '1')
GROUP BY
P.CVACLICA
ORDER BY 1
END-EXEC.
IF SQLCODE NOT = CORRECTO AND
SQLCODE NOT = NOENCONTRADO
THEN
MOVE 'DECLARE-CURSOR1' TO WS-PARRAFO
MOVE 'FVACARTV' TO DET8-TABLA
PERFORM FIN-DB2.

40

BETWEEN (not between)


_______

WHERE CAMPO1 BETWEEN 13 AND 16


igual que WHERE CAMPO1 >=13 AND CAMPO 1 <= 16

IN (not in)
__

WHERE CAMPO1 IN ('A00', 'C01', 'E21')


igual que WHERE CAMPO1 = 'A00'
OR CAMPO1 = 'C01'
OR CAMPO1 = 'E21'

LIKE (not like)


____

WHERE CAMPO1 LIKE 'TIO %' (que empienza por "TIO ")
WHERE CAMPO1 LIKE '%RAMIRO%' (que lleva "RAMIRO" en
cualquier posicion)

GROUP BY con clausulas AVG, MAX, MIN, HAVING


________
(AVG)

EXEC SQL
DECLARE XMP1 CURSOR FOR
SELECT DEPARTAMENTO, SEXO, AVG(SALARIO)
FROM TABLA1
GROUP BY DEPARTAMENTO, SEXO
END-EXEC.
EXEC SQL
FETCH XMP1
INTO :CAMPO1, :CAMPO2, CAMPO3
END-EXEC.

41

(Nos da la media de salario agupando por departamento y sexo.)


___________________________________________________________
(MAX)

EXEC SQL
SELECT MAX(SALARIO)
INTO :CAMPO1
FROM TABLA1
WHERE DEPARTAMENTO = 'AX21'
END-EXEC.

(Nos da el mayor valor del campo salario del departamento AX21.)


_____________________________________________________________
(MIN)

EXEC SQL
SELECT MIN(SALARIO)
INTO :CAMPO1
FROM TABLA1
WHERE DEPARTAMENTO = 'AX21'
END-EXEC.

(Nos da el menor valor del campo salario del departamento AX21.)


_____________________________________________________________
(HAVING)

EXEC SQL
DECLARE XMP1 CURSOR FOR
SELECT DEPARTAMENTO, AVG(SALARIO), MIN(EDLI)
FROM TABLA1
WHERE SEXO = 'V'
GROUP BY DEPARTAMENTO
HAVING MIN(EDLI) >= 16
END-EXEC.
EXEC SQL
FETCH XMP1
INTO :CAMPO1, :CAMPO2, CAMPO3
END-EXEC.
(Nos da la media del salario y el valor minimo del campo EDLI por
departamento cuando el campo sexo sea = 'V' y el minimo de EDLI
sea mayor o igual que 16).

42

RECOMENDACIONES PARA EL DISEÑO DE APLICACIONES EN DB2


_____________________________________________________

WLM.-IBM
Son varias las funciones involucradas e
implementacion de una aplicacion en DB2, debiendo tener
cuenta el que una misma persona puede realizar mas de
funcion.
Las principales funciones que sera necesario desa
son:

ADMINISTRACION DE DATOS
_______________________

Las tareas a desarrollar consisten en, sobre la base


tener una vision corporativa de los datos, desarrol
modelos logicos y mantener diccionario de datos, ademas de
* Establecer convenciones para la denominacion de
entidades de datos, las relaciones entre datos y
atributos importantes.
* Definir reglas de integridad de datos.
* Desarrollar vistas de usuario.
* Soporte al Administrador de base de datos y a
analistas de aplicaciones.
* Participar en las sesiones de diseño de base de datos.

ADMINISTRACION DE BASE DE DATOS


_______________________________

Es responsabilidad de esta funcion el diseño y creacio


de objetos DB2, tales como tablas, vistas e indic
incluyendo ademas:
* Diseño de modelos fisicos de datos.
* Desarrollo de nombres estandard para objetos DB2 , ta
como espacios de tablas, tablas, indices y vistas.
* Definicion y creacion de objetos DB2.
* Asistir a los analistas de aplicaciones en los prototip
funcionales.

43

* Desarrollar modelos de JCl para utilitis.


* Recomendaciones de procedimiento de backup/recovery p
las tablas de aplicacion.
* Soporte a los programadores de aplicaciones en la prueba
las aplicaciones DB2.
* Participar en las revisiones de diseño de aplicaciones.
* Dar soporte tecnico a miembros del equipo de desarrollo.

ADMINISTRACION DEL SISTEMA DB2


______________________________

Es responsabilidad de esta funcion el controlar e


subsistema DB2. Normalmente esta funcion no existe
inicio, y entonces es compartida por el Administrador de
Base de Datos y el Programador del Sistema.
responsabilidades que incluye son:
* Definir el entorno de operacion (hw. y sw.).
* Definir las opciones iniciales de instalacion.
* Suministrar la guia de funcionamiento al programador
sistema y al operador.
* Suministrar informacion a la funcion de planificacion
capacidad.
* Establecer directrices de backup y recuperacion.
* Controlar y perfeccionar el funcionamiento del subsist
DB2.
* Participar en las revisiones de diseño.
* Realizar diagnostico de errores,tanto del sistema como
aplicaiones.
* Establecer directrices para el uso de las funciones
seguridad del subsistema DB2 y coordinar su uso con
funcion de seguridad de la organizacion de administracio

PROGRAMADOR DEL SISTEMA DB2


___________________________

Esta funcion es similar a la tradicional de programado


del sistema, en lo que se refiere al entorno DB2 incluye:

44

* Instalacion de los productos prerrequisito.


* Instalacion de DB2 y otros productos relacionados.
* Implementar procedimientos para la determinacion d
problemas.
* Aplicar mantenimiento de sw.
* Ejecutar las herramientas de medicion de rendimiento
control, suministrando la informacion a las funciones
ADMINISTRACION DEL SUBSISTEMA DB2 Y DE PLANIFICACION
CAPACIDAD.
* Implementar procedimiento de backup y recovery.
* Suministrar autorizacion inicial.
* Desarrollar procedimientos de operacion y entrenamiento
operadores.

OPERACION DEL SYSTEMA DB2


_________________________

Esta responsabilidad incluye:


* Arrancar, parar y controlar el subsistema DB2.
* Controlar los mensajes del DB2 y tomar las accio
pertientes.
* Comunicacion con los demas operadores del sistema ( CIC
TP).
ANALISIS DE APLICACIONES
________________________

Esta funcion tiene la responsabilidad de determinar


documentar los requerimientos de la aplicacion, incluyendo
definicion de las relaciones entre los datos y los modelos
uso. En concreto, esta responsabilidad incluye:
* Definicion de los requerimientos de la aplicacion.
* Definicion de las relaciones entre datos y modelos usado
* Desarrollo del diseño logico de la aplicacion.
* Definir las especificaciones de los programas.

45

* Coordinar las revisiones del diseño.


* Coordinar las pruebas integradas de programas.

PROGRAMACION DE APLICACIONES
____________________________

Esta funcion es responsable del desarrollo de programa


e incluye:
* Codificar y probar programas.
* Implementar las reglas de integridad de datos.
* Codificar rutinas comunes, tales como rutinas de sali
codigos de retorno del SQL,puntos de control logicos,etc
* Creacion y carga de datos de prueba en tablas.
* Participar en las revisiones del diseño y planificacion
pruebas.
* Desarrollar procedimientos de backup y recuperacion para
aplicacion.

SOPORTE DE CENTRO DE INFORMACION


________________________________

El requerimiento de esta funcion surgira si se van


utilizar herramientas orientadas a usuarios finales, ta
como QMF o AS. Las responsabilidades que incluye e
funcion son:
* Añadir nuevos usuarios y mantener sus profiles.
* Soporte de consultas a usuarios finales.
* Asistir a los usuarios en la localizacion y acceso de
datos que requieren.
* Controlar el uso de disco por los usuarios finales.
* Desarrollo de consultas comunes y complejas.

46

REPRESENTANTES DE LOS USUARIOS


______________________________

Las responsabilidades iniciales de los usuarios son:


* Asesoramiento en la identificacion y definicion de l
entidades de la empresa y de sus procesos.
* Definicion de las reglas de integridad.
* Definicion de los objetivos de seguridad, disponibilidad
rendimiento.
* Pudiendo tambien involucrarse en la fase de desarrollo
la aplicacion,para facilitar la creacion de prototipos
cons4 -- e informes.
En una fase inicial, las funciones de ADMINISTRACION D
DATOS Y ADMINISTRACION DE BASES DE DATOS, pueden ser asumi
por una sola persona.
Igualmente que en el caso anterior, las funcioones d
PROGRAMACION DEL SISTEMA DB2 y ADMINISTRACION DEL SIST
DB2, pueden ser tambien asumidas por una sola persona.

MACRO ACTIVIDADES A DESARROLLAR EN UN PROYECTO


______________________________________________
¦Gestion de Proyecto.
PLANIFICACION¦Seleccionar la aplicacion piloto.
¦Definicion de estandares.
¦Identificar los recursos a proteger.

¦Definir el entorno de software.


¦Verificar requerimientos hw.
HW/SW INSTAL.¦Verificar requerimiento sw.
¦Determinar las opciones de instal. del DB
¦Instalar DB2.

¦Preparacion del entorno.


¦Desarrollar rutinas y proc. comunes.
DISEÑO Y ¦Analisis de la aplicacion.
DESARROLLO ¦Diseño de Bases de Datos.
APLICACION ¦Desarrollo de programas y prueba.
¦Paso de desarrollo a produccion.

47

¦Procedimientos de arranque y parada.


¦Definir procedim. Backup y Recovery.
OPERACION Y ¦Preparar procedim. de control.
RECUPERACION ¦Desarrollar proced. recovery y backup sis
¦Desarrollar proced. backup y recovery de
¦ aplicaciones.

¦Estrategia de desarrollo.
GESTION RDTO ¦Definir entorno de herramientas.
¦Analizar y refinar.
¦

De la lista de actividades expuesta, como se observ


existen algunas que solo es necesario realizarlas una v
otras que habra que realizarlas ciclicamente y finalme
aquellas que son propias de cada aplicacion a desarrollar.
Del conjunto de funciones expuestas, sera necesari
asignarlas a personas que formen parte del Proyecto y que
menos seran:
* Una persona como Administrados de Base de Datos
Administrador de Datos.
* Dos analistas de aplicaciones, uno actuando como lider
proyecto.
* Dos o mas programadores de aplicaciones.
* Una persona, con el papel de Programador del Sistema
Administrador de Datos del Sistema.
PLANIFICACION.
_______________

1.-Gestion del Proyecto.


Consistira en el desarrollo de la planificacion
Proyecto , definiendo la duracion de cada una de las
tareas y la dedicacion a ellas de los recursos del equi
que en algunos casos no sera del 100%.
I5 Planificacion de la formacion y entrenamiento
diferentes miembros del equipo.

2.-Seleccion de la aplicacion piloto.


En la que participaran el administrador de la bas
datos y analista de aplicaciones.

48

Debera ser una aplicacion de bajo riesgo, que tenga


amplio espectro de aplicacion de herramientas, c
simulacion completa y no compleja ademas de facil
demostrar a los usuarios finales.

3.-Definicion de Estandares.
Participaran en administrador de base de datos
administrador de datos, el programador del sistema y
analista de la aplicacion.
Su actividad consistira en :
a) Denominacion de los objetos DB2, programas, cop
transacciones, usuarios, jobs.
b) Directrices para el diseño de tablas y de
aplicacion.
c) Directrices para la programacion de la aplicacion
d) Directrices de documentacion.
e) Procedimientos especificos de instalacion.

4.-Identificar los recursos a proteger.


Definir un entorno de acceso limitado de datos
autorizaciones y responder a los requerimientos de auditor
Ser responsable el administrador del sistema, y a
personal que tenga la responsabilidad de mantener el ento
de seguridad. Ademas participarna el administrador de ba
de datos y analista de aplicaciones.
Las tareas a realizar son:
* Definir los objetivos de seguridad.
* Identificar los recursos a proteger.
* Establecer los grupos de autorizacion.

DISEÑO Y DESARROLLO DE LA APLICACION


____________________________________

1.-Establecer el entorno de desarrollo de la aplicac


Consistira en preparar el entorno de trabajo
programador de aplicaciones, en cuya actividad participara

49

administrador del sistema y el administrador de bases


datos.
El entorno de trabajo estara integrado por librer
procedimientos (jcl's, utilidades, etc.) y rutinas comunes
verificacion SQLCA, frecuencia de puntos de control,etc).

2.-Analisis de aplicaciones.
Consistira en la eleccion y aplicacion de
metodologia por parte de los analistas de aplicaciones,
para las tareas de:
* Definicion de requerimientos.
* Diseño externo.
* Modelo logico de datos.
* Diseño interno.
Actividades importantes, integradas en las señala
son:
- ANALISIS DE DATOS.
- DESARROLLAR PROTOTIPOS FUNCIONALES ( QMF, CSP, SQL
- DIRECTRICES PARA EL DISEÑO DE APLICACIONES.

3.-Diseño de Base de Datos.


Tarea a realizar por el administrador de base de da
con la colaboracion del analista de aplicaciones.

4.-Desarrollo y prueba de programas.


Consistira basicamente en la codificacion y prueb
los programas de la aplicacion, el responsable directo s
el programador de aplicaciones y tambien participara
analista de aplicaciones el el administrador de base
datos.
Las tareas a realizar son:
* Crear datos de prueba.
* probar las llamadas SQL.
* Desarrollar los programas.
* Prueba unitaria.
* prueba integrada.

50

5.-Paso de Desarrollo a Produccion.


El responsable ser el lider del projecto y partici
todo el equipo en esta actividad, cyuas tareas
importantes son:
* Desarrollar el plan de migracion.
* Revisar el rendimiento de la aplicacion.
* Obtener el espacio en disco de produccion.
* Informar al personal de produccion de la carga esperada.
* Desarrollar una lista de puntos claves para el manejo
problemas.
* Mover definiciones de bases de datos (DDL).
* Crear librerias y mover programas de aplicacion.
* Realizar la integracion de las tareas en CICS, TSO.
* Cargar nuevos datos.
* Nuevos usuarios.
* Establecer autorizaciones.
* Ejecutar RUNSTATS.
* Preprocesar, compilar, link y bind de programas.
* Pasar el EXPLAIN a todos los planes y verificar que se u
los caminos esperados.
* Establecer procedimientos de contabilidad.
El DB2 suministra rutinas de servicio llam
"attachement facilities" que conectan el programa
aplicacion al DB2 para permitir usar sus servicios.
comando DSN y sus interfases asociadas, DSNELI (para TSO
Batch ), DSNCLI ( para CICS ) , son las facilidades stand
de conexion al DB2.
Por tanto cualquier programa de aplicacion
totalmente dependiente de la conexion al DB2. Por ejemp
no se pueden cambiar los nombres de planes, antes
finalizar la aplicacion. Si el DB2 termina, tamb
terminar la aplicacion.

51

DISEÑO DE BASES DE DATOS


________________________

INTRODUCCION.-
______________

En el proceso de diseño de bases de datos, deber a h


una primera fase de diseño en la que se definiese
"Arquitectura de datos" o "Modelo de datos corporativo",
represente de forma general a la entidad, sin entrar
detalles, simplemente a nivel de U Grupos de Datos
Relaciones entre estos U ( un empleado, un departament
cliente, un prestamo, etc.), lo cual supondra el inicio
diseño del Sistema de Informacion de la entidad.
Una vez cubierta la fase anterior, se iniciara
proceso de analisis de cada una de las aplicacione
subsistemas definidos en el Sistema de Informacion, y
consiguiente al "analisis de los datos" propios de
aplicacion, definiendo entonces el contenido de pantall
informes y otros ficheros que requiera el usuario.
DISEÑO LOGICO DE BASES DE DATOS
_______________________________

A)ANALISIS DE DATOS.
____________________

1)Establecer normas de denominacion de los datos p


evitar sinonimos(elementos con diferente nombre y mi
significado) y homonimos (elementos con el mismo nombr
diferente significado).

2)Durante la elaboracion del modelo de datos, nue


U entidades U se crearan siempre que dos entid
U relacionen U en una forma varios a varios.
Un ejemplo podra ser que un cliente ha prestado vari
avales y que un aval ha sido hecho por varios clientes.
cual nos llevara a aconsejar la creacion de una ta
extra de Avales/clientes.
En esta fase se definiran tambien los atributos de
relaciones y de las entidades. En consecuencia
diferentes items de datos que integran una entida
mediante que claves y tipos de las mismas establecere
las relaciones entre las diferentes entidades.

52

3)En la teoria relacional, clave primaria o candidata


implica camino de acceso o secuencia.

4)Foreign keys son frecuentemente buenas candidatas para


rendimiento de indices. (se puede usar en joins).
Las Foreign Keys son las llamadas "claves ajenas", es de
columna(s) de una entidad que es clave primaria en otra.
Siendo muchas veces "claves candidatas" en la primera.

5)Un "Clustering index" es aquel que determina el orden


fisico de las filas de una tabla.

B)NORMALIZACION
_______________

Una vez realizado el analisis de datos, se procedera


normalizar las entidades (tablas) en tercera forma norma
1)Primera forma normal. Consiste en la eliminacion de
campos repetitivos mediante la creacion de una nu
entidad. La cual incluye una Foreign Key en la nu
entidad, para asi poder realizar JOIN con las
entidades.
La importancia de esta normalizacion, viene d
fundamentalmente por la eliminacion de campos repetidos
dara lugar a un no deseado mantenimiento de los cam
implicados.

2)Segunda forma normal. Consiste en determinar que da


elementales son dependientes de campos de clave
primaria. Una nueva entidad se creara con estos camp
incluyendo tambien una foreign key en la nueva entid
para asi poder hacer join con las dos.

3)Tercera forma normal. Consiste en determinar que da


elementales son dependientes de solamente una parte de
clave primaria. Una nueva entidad se creara con es
campos, incluyendo una foreign key en la nueva entid
para asi poder hacer join con las dos entidades.
La importancia de la normalizacion en segunda y terc
forma normal, consiste en evitar anomalias de actualizac
( en especial en lo que se refiere a la integridad
datos, tal como borrado desintencionado de registros ).
una tabla contiene campos no dependientes de la cl
primaria completa, entonces podran darse anomalias en
actualizacion.

53

C)INTEGRIDAD REFERENCIAL
________________________

La integridad referencial puede ser definida como:


* Siempre que se necesita cambiar una tabla (insert
actualizar, borrar), que condiciones deben existir en
otras tablas?.
* Siempre que se modifica una tablas, que otras tab
deben ser cambiadas?.
Estos aspectos afectan al desarrollo, a la planificacion
la recuperacion, etc.

NOTA: En la version 2 del DB2, la integridad referencial


una funcion del DB2, la cual asegura la validacion de la
relaciones entre una y otra tabla. Se pueden definir
criterios referenciales, por ejemplo el que un empleado
pueda ser dado de alta en una departamento si este no
existe. Tambien que una fila de una tabla de departament
no puede ser borrada, mientras existan empleados asignad
a ese departamento, etc.

INTEGRIDAD DE DATOS:
_____________________

1.-UN ADECUADO DISEÑO DE BASE DE DATOS.


_______________________________________

* ANALISIS TOTAL DE LOS DATOS.


Todos los campos que son necesarios y no derivabl
almacenaran en una tabla.

* NORMALIZACION DE LOS DATOS, PARA EVITAR:


Restricciones artificiales en la aplicacion.
Almacenamiento redundante de datos. (excepto p
Foreign Keys).
Cualquier posible anomalia en la actualizacion.

54

2.-UN ADECUADO DISEÑO DE MODULOS, CODIFICACION Y PRUEBAS.


_________________________________________________________

* Implementar las reglas de integridad refere


definidas al diseñar las bases de datos.
* Definir e implementar las unidades logica
trabajo.(LUW)
Para en cada una de ellas poder establecer los p
de Commit en los programas batch o de Sync en
interactivos.
Esto es un aspecto importante en cuanto a integrida
rendimiento.
-Una orientacion en programas interactivos puede ser:
Diseñar la aplicacion de tal modo que una LUW
corresponda con cada pantalla que se visualiza.
Siempre que haya un CICS RETURN supone un S
implicito.
Evitar cancelaciones, de tal forma que cualquier cod
de retorno imprevisto, suponga un rollback y mensajes
usuario, ademas de escribir la SQLCA en un fichero
errores.
Una LUW se corresponde con el uso de un thread, c
tiempo debe minimizarse, por cuanto supone asig
recursos ( plan, DBD's, espacio de tablas, indices
por ello el thread debe procurar liberarse cuando
dialoga con el terminal. Debe tambien recordarse que
Rollback actua desde el ultimo commit o sync.
-Una orientacion en programas batch puede ser:
En programas de significada actividad de actualizac
ser necesario usar Commit y prever restauracion logi
Las Commit deberan hacerse cada cierto numero de LUW,
base a cuantos bloqueos puede tener el IRLM ( esto
aplicable a bloqueos de paginas o tambien cada 10 o
minutos.
No olvidar que todo programa batch que realice Com
periodicos debe tener restauracion logica o debe po
volver a ser ejecutado sin afectar a la integridad
los datos.

55

RENDIMIENTO Y CONCURRENCIA EN BASE DE DATOS


___________________________________________

ALGUNOS DE LOS FACTORES CLAVES SON :


____________________________________

A)CONCURRENCIA.
______________

* Esperas por liberacion de bloqueos pueden esconder


causa de un lento rendimiento.
* Pueden producirse fallos del SQL debido a que
sobrepasa el numero de bloqueos concurrentes del I
debido a un lock timeout o a un deadlock.

B)TRABAJO REALIZADO POR EL DB2 PARA EL SQL.


___________________________________________

* El factor clave consiste en el numero de paginas que


leidas y/o escritas por el DB2,lo cual es funcion del
de acceso y la cardinalidad de las columnas.
-Informacion sobre la cardinalidad de las columnas
disponible en el Catalogo del DB2 (
SYSIBM.SYSCOLUMNS.COLCARD), para columnas que son
primera de un indice. Informacion sobre la cardinali
de indices completos tambien esta disponible en
Catalogo del DB2 (tabla SYSIBM.SYSINDEXES, colum
FIRSTKEYCARD Y FULLKEYCARD.
-Informacion sobre el plan de acceso esta disponible
DB2 EXPLAIN. Se puede usar para una sentencia SQL o p
una Plan completo. Esta informacion incluye:
Secuencia en la que los conjuntos (query-blocks)
sentencias son procesadas. (ejemplos de sentencias
que tiene varios query-blocks son subselects, UNIONs
JOINs).
Secuencia de acciones dentro de un query-block.
Si se esta usando un indice. (se suministra el nomb
Como se esta usando un indice (MATCHCOLS=0 indic
busqueda por indice con mucho tiempo de ejecucion).

56

Si hay bloqueo a nivel de pagina o espacio de tabl


(TSLOCKMODE). Cuando es igual a X o S reducira
concurrencia.
Si se hace clasificacion y porque. (hay ocho column
de indicador de sort).
* LOS SIGUIENTES ASPECTOS AFECTAN A LA ELECCION DE U
DE ACCESO DEL DB2.
La consulta.
Los indices definidos.
Los parametros DDL. (ejemplo locksize).
Los parametros bind. (ejemplo isolation).
Las estadisticas en el DB2 para el espacio de tablas,
tablas y los indices, incluyendo:
-Tamaño de la tabla.
-Cardinalidad de los indices.Indices con pocos valo
distintos son menos usados por el DB2.
-Como esta organizado el espacio
tablas.(clustered?).
-Como estan organizados los indices,
-Cual es el nivel de actualidad de las estadisti
respecto al estado actual de los datos(RUNSTATS).
* DEFINIR SOLAMENTE LOS INDICES IDONEOS (UTILES), LOS
DEGRADAN PROGRAMAS DE USUARIO Y DE UTILIDAD.
* TABLAS E INDICES BIEN ORGANIZADOS REDUCEN I/Os.
El catalogo del DB2 nos informa de este ni
organizacion.
* IMPRESCINDIBLE EL USO DE PROTOTIPOS.

DISEÑO FISICO DE BASES DE DATOS


________________________________

A continuacion vamos a ofrecer una serie de recomendacio


en la definicion de los diferentes objetos del DB2: Gru
de almacenamiento, Bases de datos, Espacios de tabl
Tablas, Indices y Vistas.

57

1)Si las tablas usan muy frecuentemente el JOIN, habra


considerar la posibilidad de desnormalizar las tabl
almacenando los datos duplicados para evitar la necesi
del JOIN.
Habra que analizar el equilibrio entre el incremento
coste del JOIN y el incremento del coste de mantenimie
de datos duplicados.

2)Aconsejar el uso de NOT NULL en las columnas, a no


que exista requerimiento por parte de la aplicacion. C
columna nula afecta negativamente al rendimiento y requi
un byte extra por fila y ademas complican la logica
programa, que debe verificar las nulas,
3)Colocar las columnas VARCHAR al final de la tabla. E
tipo de columnas solo se definiran, cuando la variabili
del tamaño sea significativo, unos 20 bytes de media.

4)El usar ficheros Vsam definidos por el usuario, en lu


de la definicion de grupos de almacenamiento, da ma
flexibilidad en la operacion. Permitiendonos incremen
espacios de tablas o indices y/o mover un fichero DB2
tener que hacer descarga, borrado, y carga de la tab
se podra usar el REORG con UNLOAD o DSN1COPY para camb
de lugar ficheros DB2).

5)Limitar el nombre de indice a ocho caracteres, para po


usar el mismo nombre cuando se usen grupos
almacenamiento o se definan ficheros DB2.

6)Asignar un prefijo a los objetos DB2 por cada aplicaci


para facilitar las consultas al catalogo del DB2.

7)Se aconseja una tabla por espacio de tablas.

8)Usar LOCKSIZE TABLESPACE:


Cuando una tabla es accedida en modo de solo lectura
Cuando un solo usuario la actualiza. (ej. progr
batch).
Recordar que este atributo se puede modificar ante
despues de ejecutar un programa mediante el bind. O
solucion sera codificar LOCK TABLE en el programa.
En este caso tambien es aconsejable usar SUBPAGES = 1
los indices.

58

9)Usar LOCKSIZE ANY cuando se ha decidido bloqueo de


En este caso el DB2 actua de la siguiente manera:
* En el momento del BIND el DB2 elige normalmente bloq
de pagina, a excepcion de que ISOLATION = rr y scan de
tabla se realize.
* Durante la ejecucion el DB2 escalara el bloque a nivel
tabla si, y solamente si, el numero de paginas actualme
bloqueadas en la tabla exceda al numero especificado c
limite en NUMLKTS.
En este caso subpages debe ser > 1 , en base al nivel
actividad y al tamaño de la tabla.

10)Usar CLOSE = NO a no ser que el fichero se use muy

11)Todos los accesos a los datos deben de realizarse


a traves de VISTAS, nunca a traves de las tablas
Incluso en el supuesto de que la VISTA sea igual a la t
Tambien conviene definir sinonimos para cada vista, de
forma que los accesos sean independientes del creador
tabla o vista.Otras ventajas son:
* Incrementa la flexibilidad de la autorizacion :
usuarios de la vista tendran acceso solamente a las col
de la vista.
* Incrementa la simplicidad de las sentencias SQL: Limi
el acceso al conjunto de filas y columnas que integra
vista.
* Incrementa el control sobre los programas y sus acce
los datos.
( SELECT USER FROM SYSAPPL.USERVIEW )

12)Antes de cargar los datos crear siempre prime


indices.

13)Considerar el particionar grandes tablas. La elecc


numero de particiones sera en base al tamaño de la tabla
numero de indices, la configuracion de los discos
planificacion de utilidades.
* Facilita el REORG , COPY y RECOVER por particion.
* Facilita el reducir de tamaño los ficheros del DB2.
* Un aspecto importante es en que medida es particiona
la clave del cluster. Puede ocurrir que la naturaleza
los datos dificulten una buena o aceptable distribucion
las particiones. En caso de que la clave primaria

59

consideremos como "no particionable", las soluciones son


-Tener una gran tabla.
-Crear multiples tablas.
-Definir otro indice primario que facilite la particion.
* En general evitar tener tablas o particiones mayores
35% del disco.

14)Normalmente usar solo PCTFREE, para establecer el


libre.

15)En tablas pequeñas considerar espacio libre extra


reducir la contencion. Consideraciones generales entor
espacio libre son las siguientes:
* A mayor espacio libre:
-menor frecuencia de Reorganizacion.
-menor contencion.
-incremento del tiempo de ejecucion de los programas d
-incremento de I/O de una sentencia SQL que acce
multiples filas.
-mayor ocupacion de disco.

16)Aspectos generales de almacenamiento, que pueden


al rendimiento.
* En tablas de acceso muy frecuente, procurar colocarl
en los discos mas rapidos y en los de cabecera.
* La anterior recomendacion aplicarla al Catalogo y
Directorio del DB2.
* Igualmente con lo referente a los espacios de tabl
temporales del DB2. (usadas en join, subselect, ord
by,..).
* Procurar evitar el uso de espacio secundario en datos
indices, ajustando adecuadamente el tamaño de las tabla
El uso de espacios secundarios degrada el rendimiento.
* Cuando se usen grupos de almacenamiento, asignar un so
volumen a cada grupo. Facilitara el control.
* Evitar usar mas del 75% de cada volumen.

60

SELECCION DE INDICES
____________________
La seleccion de indices es uno de los aspectos
importantes en el diseño, siendo la mas notable consecuen
el rendimiento, ademas de permitirnos forzar la unicidad
registros en donde la clave sea unica.

1)Cuando para una tabla se defina mas de un indice, defi


de forma explicita el indice cluster. Debiendo ser aq
bajo cuyo criterio es normalmente procesado el conjunto
datos.

2)Evitar indices que empiecen por la misma columna, con


excepcion de que las pruebas demuestren una utili
importante.

3)En indices de multiples columnas, la secuencia de


columnas es un aspecto muy importante, especialmente en
que se refiere a la primera columna. Todo ello es critico
la seleccion del camino de acceso y por tanto en
rendimiento. Consultar manual GG24-3004.

4)Es necesario analizar la relacion coste-beneficio existe


en cada indice candidato, antes de decidir su utilizacion.
* Los costes aumentan :
-Al realizar inserciones, borrados e incl
actualizacion.
-Al procesar utilidades (LOAD, REORG, CHECK y RUNSTATS
* Los beneficios son:
-Muy limitados si el DB2 tiene ya un indice alternat
que le permitira realizar de forma eficiente
sentencia SQL.
-Reduccion del tiempo de acceso a los datos.
-Reduccion del tiempo de proceso, al poder reali
funciones sin tener que hacer una clasificacion previa

5)Una vez cargadas las tablas, realizado el RUNSTATS y he


el bound de los planes de la aplicacion, se debe analizar
los indices definidos estan siendo usados eficientemente
determinar las causas de situaciones diferentes, para po
decidir si es necesario anular o crear otros indices.

61

Para ello es necesario trabajar sobre un entorno de tab


muy similar al que vaya a darse en produccion.
* Consultar las tablas de SYSINDEXES Y SYSCOLUMNS, para
-analizar en que medida un indice es unico o no.
-que indices no estan siendo usados por las
estaticas.
-si un indice no es usado, puede ser debido a unas
defectuosas o que sobra el indice.
-para las sql dinamicas hacer un seguimiento con
Explain.

DISEÑO, CODIFICACION Y PRUEBA DE APLICACIONES


_____________________________________________

ACCESO DE DATOS
_______________

Hemos señalado anteriormente que los programas y consul


almacenadas, accederan siempre a las tablas atraves de VIS
, lo cual hace que las sentencias sql sean independientes
creador de las tablas y de los cambios de las mismas.
Otros aspectos importantes a tener en cuenta son:

1)Evitar que en las clausulas WHERE se den las siguien


condiciones:
-Forzar hacer la conversion numerica para colum
numericas. Para ello se deben hacer las variable
literales host, del mismo tipo de datos, precision
escala.
-Especificar una serie de caracteres mayor que la longi
de la columna. Procurar siempre que la variable o lite
sea menor o igual en tamaño.
-Codificar argumentos de busqueda que constitu
predicados que el DB2 no pueda decidir su uso contra
indices. Estos aspectos son ampliamente analizados
GG24-3004.

2)Si hay varias tecnicas para codificar una sentencia S


analizar cual de ellas es la mas eficiente.

62
3)Algunas tecnicas que ayudan a elegir el mejor camino
acceso son:
a)Si se va a actualizar una columna de un indice, entonc
este indice no se considerara por el DB2 en sus criterio
de busqueda. El procedimiento aconsejable sera:
1)DECLARE y OPEN, una SELECT con el criterio de actualiz
2)FETCH a fila ( proxima).
3)Cambiar el valor de la columna en el programa.
4)DELETE de fila usando la clave primaria unica.
5)Re-Insertar la fila con el nuevo valor de la columna.
6)Repetir los pasos 2-5 para continuar actualizando fila

4)Siempre que sea posible usar JOIN's en lugar de Subquery


Prototipo previo.

5)Evitar el uso del operando OR, a no ser que cada predic


se refiera a la misma columna y el operador de comparac
sea =.
-Una alternativa al OR es UNION. Tener en cuenta que e
opcion no presenta registros duplicados.

6)Si en el acceso a grandes volumenes de informacion se


obliga al DB2 a hacer Sort interno, porque no disponga en
acceso de un indice ( casos de JOIN, ORDER BY, GROUP
DISTINCT), entonces valorar el hacer un DFSORT.

DESARROLLO Y PRUEBA DE PROGRAMAS


________________________________

1)Fase de prueba unitaria.


--------------------------

Cada desarrollador debe responsabilizarse de precompil


compilar, linkeditar y hacer bind de sus programas, ade
de disponer de sus tablas de prueba, para lo cual cada
podra tener su propia base de datos y grupos
almacenamiento. Todo ello reducira ademas la contenc
en el catalogo del DB2.
63

2)Fase de Prueba de la aplicacion.


----------------------------------

Primero se debe determinar que usuario hace


precompilacion, compilacion, linkedita y bind, evitando
el que si otro usuario hace el bind del plan, el origi
pierda la autoridad sobre el mismo.
Determinar que ficheros se utilizaran en las pruebas par
-codigo fuente.
-DBRM.
-Modulos.
-JCL's.
Prever un mecanismo para determinar que planes deben
rebound, cuando un programa se modifica. ( tabla
catalogo : SYSIBM.SYSDBRM ).

¦ Programa ¦
¦ Fuente ¦
¦
v
¦ Traductor ¦
¦ Comandos Cics ¦
¦
v
¦ Precompilador ¦
¦ DB2 ¦
¦
¦ ¦
v v
¦ DBRM ¦ ¦ Compilador ¦
¦ Cobol ¦
¦
v ¦
¦ BIND ¦ v
¦ linkaje ¦
¦
v ¦
¦ PLAN ¦ v
¦ modulo ¦

El Plan se almacena una tabla del catalogo del DB2, y es


consecuencia de las sentencias SQL, de las definiciones de
las tablas e indices sobre las que actua, etc., con objeto
optimizar el camino de acceso a los datos.
64

GESTION DE CAMBIOS EN BD
________________________

Por cambios en :
-Tablas y/o vistas (DROP, CREATE, ALTER).
-Adicion o baja de indices.
-Cambios en el espacio de tablas (ALTER).

A)Si una tabla y/o indice se crea y se carga con datos,


inmediato se debe:
1)RUNSTATS sobre los objetos afectados.
2)Todos los planes afectados por los cambios deben
rebound.

B)Si se crea una nueva tabla y/o vista o dropped, y recrea


Entonces se debe de hacer inmediatamente:
1)Hacer un re-GRANT de autorizacion para la tabla
vista.
2)Avisar a los usuarios afectados para re-CREATE
sinonimos para la tabla y/o vista.
3)Todos los planes afectados por el cambio debe
rebound. (*).
(*) Tambien despues de ALTER una tabla, un espacio
tablas o indice y despues de DROP de un indice.

OPTIMIZACION DEL BIND


______________________

1)Se hara un REBIND de un plan siempre que se desee que


DB2 vuelva a determinar sus caminos de acceso. Algunos ca
son:
-Despues de crear un indice para una tabla que ya te
datos.( CREATE ---> RUNSTATS ---> REBIND ).
-Despues de ALTER un espacio de tablas, tabla o indice.
-En la mayoria de los casos, despues de un RUNSTATS.
-Despues de cambios significativos en los datos:
REORG ---> RUNSTATS ---> REBIND

65

2)Para reducir el numero de bloqueos de paginas, hacer B


con ISOLATION = CS (cursor stability, es aconsejable desde
punto de vista de concurrencia, si se va a acceder una s
vez a una fila en una transaccion, pero si se accede a
misma file varias veces no se garantiza consistencia,
tanto cuando existen razones de integridad se requi
ISOLATION = RR (lectura repetible).

3)Para mejorar el rendimiento : BIND con RELE


(DEALLOCATE)
Para mejorar la concurrencia BIND con RELEASE (COMMIT).
Nota: En la preparacion de esta primera parte se
utilizado, basicamente, el GG24-3004-00 IBM DATABASE
APPLICATION DESIGN AND TUNING GUIDE, el SC26-413
Development Guide y la publicacion DB2 APPLICAT
DEVELOPMENT RECOMMENDATIONS.

NUEVAS FUNCIONES Y MEJORAS DEL DB2 R3


_____________________________________

Resumimos en este apartado las mejoras que


referencian en el manual GG24-3182 : IBM DATABASE 2 RELE
3 NOTEBOOK. En el citado manual existen tambien ejemp
sobre la aplicacion de las mejoras aportadas por el DB2 R3

1.-MEJORAS EN EL LENGUAJE SQL:

A)Funciones escalares para:


* Convertir valores de un tipo de datos a otro.
* Extraer sub-series de series.
* Sustituir valores NULL en busqueda de datos, por o
valor especificado por el usuario,
Las nuevas funciones escalares son: DECIMAL, DIGI
FLOAT, HEX, INTEGER, LENGTH, SUBSTR, VALUE Y VARGRAPHI
Las anteriores funciones : MAX, MIN, COUNT, AVG y S
ahora se denomina funciones de columna.
B)Nuevo operador de concatenacion para series.

66

C)Mejoras en el operador UNION:


* UNION ALL para retener valores duplicados.
* Eliminacion de restricciones del UNION.

D)Eliminacion de algunas restricciones en :


* Operador UNION ALL.
* Operador LIKE.
* INSERT con subselect.
* Clausula SET de la sentencia UPDATE SQL.

E)Posibilidad de manejar los errores de division por c


y otras operaciones de conversion y aritmeti
invalidas.

F)Nuevos tipos de datos : DATE, TIME y TIMESTAMP.

G)Nuevos tipos de datos para numeros de simple precis


y coma flotante.

H)Eliminacion de algunas restricciones de las VIEW.

2.-MEJORAS EN LA OPERACION.

A)Soporte DL/I Batch.

B)Mejoras en programas de utilidad:


* LOAD REPLACE de una particion. Antes solo era posi
a nivel de espacio de tablas.
* MODIFY .... (*) , que permite a un usuario bor
todas las entradas en SYSIBM.SYSCOPY, de un espacio
tablas, particion o fichero.
* RECOVERY INDEX que permite recuperar de una pasada
lista de indices o todos los indices de un espacio
tablas.

67

* RUNSTATS mejorado, al recojer mejores estadisticas p


incrementar el rendimiento de las sentencias SQL.

3.-MEJORAS DE RENDIMIENTOS.

A)En los programas de utilidad reseñados.

B)en UNION ALL.

C)En :
* Evitar sort innecesarios en ORDER BY y GROUP BY.
* Clasifica el resultado de una IN subquery.
68

________________________________________________________________
________________________________________________________________

SE DEBEN UTILIZAR VARIABLES DEFINIDAS EN NIVEL 01 DE


D PARA CONDICIONES DE BUSQUEDA DEL DB2. LAS VARIABLES
A CLAUSULA WHERE HAN DE ESTAR DEFINIDAS EN LA WORKING,
GARANTIZAR UN RESULATADO OPTIMO.

________________________________________________________________
________________________________________________________________

Das könnte Ihnen auch gefallen