Está en la página 1de 58

INDICE

________

CONCEPTOS.

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

MECANISMOS DE SEGURIDAD DE LOS DATOS.

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

MECANISMOS 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

ESTRUCTURA 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

INSTRUCCIONES 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
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
1/58
- 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

VISTAS.

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

SPUFI.

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

PANELES.

Panel Principal .......................................... 28


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

CODIFICACION DE INSTRUCCIONES SQL EN UN PROGRAMA COBOL.

Definir un area de comunicacion llamada SQLCA ............ 31


2/58
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

APENDICE 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

RECOMENDACIONES 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
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

PLANIFICACION.

Gestion del proyecto ..................................... 47


Seleccion de la aplicacion piloto ........................ 47
Definicion de estandares ................................. 48
Identificar los recursos a proteger ...................... 48

DISEÑ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

3/58
DISEÑO DE BASES DE DATOS.

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

DISEÑO LOGICO DE BASES DE DATOS.

Analisis de datos ........................................ 51


Normalizacion ............................................ 52
Integridad referencial ................................... 53

INTEGRIDAD 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

RENDIMIENTO 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

4/58
CONCEPTOS
_________

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


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

TABLAS
______

Los datos en las bases de datos DB2 estan disponibles para un programa
de aplicacion como un conjunto de tablas. Las tablas son estructuras de
datos de dos dimensiones, compuestas de FILAS y COLUMNAS.

Un nombre de tabla esta formado por un identificador de la persona que


creo la tabla, y de un nombre descriptivo de esta, separados por punto.

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 fija
VARGRAPHIC - DBCS de longitud variable

INDICES
_______

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


y acceso directo mediante indices. El indice debe ser unico.

Estan basados en los valores de los datos de una o mas columnas, y son
mantenidos automaticamente por el DB2 cuando se produce un cambio en
los datos contenidos en la tabla. Un programa no se refiere a los indi-
ces, sino que el DB2 selecciona el indice para acceder a los datos que
el programa requiere.

El DB2 nunca usa como indice una columna que va a ser actualizada, o
una columna que esta siendo comparada con otra de la misma fila.

MECANISMOS DE SEGURIDAD DE LOS DATOS


____________________________________

5/58
VISTAS
______

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


tabla.

RACF (Resource Access Control Facility)


_______________________________________

Proporciona control de acceso al DB2 por usuarios o aplicaciones no au-


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

PASSWORDS DE ARCHIVOS VSAM


__________________________

Se usan en archivos no protegidos con RACF.

AUTORIZACION
____________

Mediante instrucciones GRANT y REVOKE de identificadores de usuarios.


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 un


recurso DB2 con un programa, de forma que esta asociacion afecta a como
pueden acceder otros programas al mismo recurso. Existen varios tipos:
S (Share), U (Update), X (Exclusive), etc.

Ningun programa podra acceder a los datos que hayan sido cambiados por
otro programa, pero que todavia no esten en la base.

6/58
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 accio-
nes individuales que la forman pueda considerarse como acabada.

Ejemplo:

Una transaccion que transfiere fondos de una cuenta A a otra B, debera


primero sustraer la cantidad a transferir de la cuenta A, y luego sumar
a la cuenta B. Cuando se terminen ambas acciones, y no antes, los datos
de ambas cuentas seran consistentes.

Una unidad de recuperacion se señala como completa mediante un COMMIT o


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 SYNCPOINT

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 perdido
su integridad o consistencia. Para lograr que los datos recuperen el
valor que tenian antes de comenzar la unidad de recuperacion, se usa la
opcion ROLLBACK para el comando SYNCPOINT.

AYUDAS A LA PROGRAMACION
________________________

Spufi:
_____ Permite usar el SQL sin tener que codificar un programa completo
mediante instrucciones que pueden ser ejecutadas y mostradas en
la terminal.

Paneles para preparacion de programas:


_____ Permiten la precompilacion, compilacion, link-edicion y binding de
un programa. Solo se necesita especificar el nombre del archivo que
contiene las instruccio-
nes fuente.

Paneles para mantenimiento de planes:


_____ Con las opciones BIND, REBIND, y FREE. Permiten crear, cambiar o
borrar el plan de cualquier programa DB2.

DCLGEN (Declarations Generator):


_____ Usa la informacion del catalogo DB2 para:

. Crear definiciones de las estructuras de tablas o vistas,


que van a ser guardadas en Bibliotecas de Copys para su pos-
terior inclusion en los programas.

7/58
. 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 variables


del programa.

2- Cada programa que accede a datos DB2 debe tener un area de datos
llamada SQLCA (SQL Comunication Area), usada por el DB2 para decir
al programa si la ejecucion de la ultima instruccion SQL ha sido
correcta, mediante un codigo de retorno , que se puede examinar en
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 instru-


ccion SQL para compilacion o ensamblaje, dando como resultado un
conjunto de instrucciones fuente (modulo fuente).
Ademas, el DB2 crea un DBRM (Data Base Request Module), que sera
usado en el paso d, y contiene informacion acerca de cada instru-
ccion SQL precompilada.

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


8/58
___________ ____________

Cada modulo fuente es compilado o ensamblado para dar lugar a un


modulo de carga. Al link-editar, los modulos de carga se enlazan
en un unico modulo objeto.

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


_______

Se relaciona el programa (el DBRM que representa las peticiones


SQL hechas por el programa) y las tablas y vistas DB2 que se quie-
ren procesar. Esto da lugar a un plan de aplicacion, el cual es
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, tablas y


vistas utilizados en el programa

. Verificar que la persona esta autorizada a realizar las


operaciones de acceso especificadas por las instrucciones
SQL del programa

. Seleccionar los caminos de acceso a los datos DB2 que el


programa quiere procesar

Cuando se va a hacer bind de una aplicacion se puede especificar:

- Isolation level:

. RR el lock afecta a todas las filas que toca el programa

. CS el lock afecta a todas las filas a las que el programa


esta accediendo actualmente

Se puede hacer lock del espacio de tabla entero que contiene la ta-
bla que se quiere proteger mediante una instruccion lock table:

. Para permitir a otras aplicaciones recuperar, pero no ac-


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 tabla de


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 espa-
cios de tablas asociados sean accedidos por primera vez

. ALLOCATE
9/58
indica que se quieren adquirir los locks cuando se aloca
el plan de aplicacion

- Resource release time

. COMMIT, por defecto


indica que se quieren liberar los locks en cada punto de
commit

. DEALLOCATE
indica que se quieren retener los locks hasta que termine
el programa

- Explain pa h selection

. YES
se pide al DB2 informacion acerca de las decisiones que
esta tomando en el establecimiento de caminos de acceso
a los datos

. NO

Si cambian las caracteristicas de la tabla o vista a la que accede


el programa, el plan de aplicacion ya no es valido, y el programa
no puede ser ejecutado. Cuando se intenta hacerlo, el DB2 automa-
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) permi-


ten comunicar peticiones de acceso a datos al DB2. Es usado por el ad-
ministrador de la base de datos para crear y cambiar definiciones de
datos, por el administrador del sistema en cuanto a autorizaciones a
usuarios de los datos, y por el programador de aplicaciones para recu-
perar y actualizar datos.

La primera clausula de una instruccion SQL dice al DB2 que operacion se


quiere realizar.

Los nombres de variables van precedidos de ':'.

CLAUSULA WHERE
______________

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


que se quieren recuperar, borrar o actualizar. La condicion de busqueda
puede estar formada por uno o varios predicados separados por AND y OR.

El DB2 primero evalua las clausulas NOT, luego AND y por ultimo OR. Se
puede cambiar el orden de evaluacion por medio de parentesis, que son
examinados primero.

Ejemplos:

10/58
. 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 recuperados
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 se


quieren recuperar todas las columnas, en el mismo orden en que aparecen
en la fila, se pondra un asterisco, en lugar del nombre de las columnas.
el valor de la primera columna especificada se guardara en la primera
variable especificada en la clausula INTO, el de la segunda en la se-
gunda, etc.

Si ninguna fila satisface la condicion, el DB2 devuelve un codigo de


NOT FOUND (SQLCODE=100).

Si la clausula WHERE permitiera recuperar los valores de las columnas


de dos o mas filas, DB2 devuelve un codigo de error en el SQLCODE y no
recupera nada.

Si varias filas cumplieran la condicion, se usara una instruccion


DECLARE CURSOR para seleccionar las filas, seguida de una instruccion
FETCH para mover los valores de las columnas a las variables una fila
cada vez.

UPDATE
______

Funcion
_______

Cambiar el valor de una o mas columnas en cada fila que satisface la


condicion de busqueda de la clausula WHERE. Tambien se puede usar para
borrar un valor de una fila , cambiando el valor de la columna a NULL.

Formato
_______

EXEC SQL
UPDATE nombre_de_la_tabla o vista
SET columnas que se quieren actualizar = nuevo valor
11/58
WHERE condicion_de_busqueda
END-EXEC

El nuevo valor especificado para una columna puede ser el nombre de


otra columna de la misma fila, una constante, una variable, una expre-
sion aritmetica, un valor nulo, etc.
Si se omite la clausula WHERE, el DB2 actualiza cada fila de la tabla
o vista con los valores dados.

DELETE
______

Funcion
_______

Quitar filas enteras de una tabla, no columnas especificas.

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 ta-


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 insertar
. Incluir una instruccion SELECT en la INSERT para decir al DB2 que
los datos para la nueva fila estan contenidas en otra tabla o vista

Formato
_______

EXEC SQL
INSERT
INTO nombre_de_la_tabla o vista (nombres de columnas)
VALUES (valor_de_cada_columna especificada en la clausula INTO)
END-EXEC

Si se especifican menos nombres de columnas de los que hay en la fila,


el DB2 les asigna valores por defecto.

Si se intenta insertar una fila que duplica otra existente en la tabla:


. Si la tabla tiene un indice unico, la fila no es insertada, y el
DB2 proporciona un SQLCODE -803
. Si la tabla no tiene un indice unico, la fila es insertada sin error

12/58
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.
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 ORDER BY.

El numero de columnas de la SELECT debe ser el mismo de la INSERT. Los


datos que se seleccionan deben ser compatibles con las columnas en las
que se van a insertar. Para las columnas que no se especifiquen se in-
sertaran los valores por defecto establecidos cuando se creo la tabla.
Cuando se inserta una fila en una vista, si esta no contiene todas las
columnas de la tabla base, el DB2 inserta en ellas valores por defecto.

FUNCIONES DEL CURSOR


____________________

El cursor permite a un programa recuperar un conjunto de filas, y luego


procesar una fila cada vez.

El DB2 construye una 'tabla de resultados' para guardar todas las filas
recuperadas al ejecutar una instruccion SELECT, y utiliza el cursor para
hacerlas disponibles al programa. Un cursor identifica la fila actual
de la tabla de resultados, que el programa puede recuperar secuencial-
mente hasta que alcanza el fin de los datos ( SQLCODE=100, NOT FOUND).
Un programa puede utilizar varios cursores, para cada uno de ellos se
utilizan las siguientes instrucciones:

DECLARE CURSOR
______________

Funcion
_______

Se usa para definir e identificar un conjunto de filas que van a ser


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

13/58
La instruccion DECLARE CURSOR nombra un cursor. La instruccion SELECT
define un conjunto de filas, que formaran la tabla de resultados.

Es posible actualizar una columna de la tabla identificada aunque no


sea parte de la tabla de resultados (que no haya sido nombrada en la
instruccion SELECT), nombrandola en la clausula FOR UPDATE OF.

Cuando DB2 evalua una instruccion SELECT, puede ocurrir que varias filas
satisfagan la condicion de busqueda, y que algunas de ellas esten dupli-
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 de


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 seleccionada.

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 apun-


tar a la siquiente fila de la tabla de resultados.

WHENEVER NOT FOUND


__________________

Funcion
_______

Para detectar que ya no tenemos mas filas para procesar se puede:


14/58
. Examinar si el SQLCODE tiene valor 100, esto ocurre cuando una ins-
truccion FETCH ha recuperado la ultima fila de la tabla de resulta-
dos y se da otra FETCH. Ejemplo: IF SQLCODE = 100 GO TO NO-DATA.

. Codificar la instruccion WHENEVER NOT FOUND bifurcando a otra parte


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 esta


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 previa-
mente en la clausula FOR UPDATE OF de la instruccion DECLARE CURSOR.
La clausula WHERE identifica el cursor que apunta a la fila que va a
ser actualizada. Despues de actualizar una fila, la posicion del cursor
permanece en esa fila hasta que se utilice una instruccion FETCH para
la siguiente fila.

Con la instruccion UPDATE se actualizan varias filas con una sola ins-
truccion SQL, mientras que UPDATE ... WHERE CURRENT OF, permite obtener
una copia de la fila, examinarla, y entonces, actualizarla.

DELETE
______

Funcion
_______

Una vez que se ha recuperado la fila actual, se puede borrar con DELETE.

Formato
_______

EXEC SQL
DELETE FROM nombre_de_la_tabla
15/58
WHERE CURRENT OF nombre_del_cursor
END-EXEC

La clausula WHERE identifica el cursor que apunta a la fila que va a ser


borrada. Despues de borrar una fila, no se puede actualizar o borrar otra
utilizando ese cursor, hasta que se de una FETCH para la siguiente fila.
Con la instruccion DELETE se borran varias filas con una sola instru-
ccion SQL, mientras que DELETE ... WHERE CURRENT OF, permite obtener
una copia de la fila, examinarla, y entonces, borrarla.

CLOSE
_____

Funcion
_______

Cerrar el cursor una vez que se ha terminado de procesar las filas de


la tabla de resultados si se quiere volver a utilizarlo. El DB2 cierra
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 cursores


abiertos son cerrados automaticamente por el DB2. Si el cursor se vuel-
ve a abrir, el proceso comenzara al principio de la tabla de resultados,
y se tendra que restablecer la posicion del cursor.

Ejemplo:
Supongamos que se quieren actualizar los datos de los empleados de la
tabla DSN.EMPL dando un SYNCPOINT cada 100 filas.

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 una


fila cada vez, de forma que el limite mas bajo de la tabla se ac-
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
16/58
WHERE EMNO = :UPD-EMP
END-EXEC

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


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

OPCIONES DE LA INSTRUCCION SELECT


_________________________________

OPERACIONES ARITMETICAS
_______________________

La instruccion SELECT se puede usar para realizar operaciones aritmeti-


cas con los datos antes de que sean proporcionados al programa. Esto se
consigue mediante operadores aritmeticos en la lista de columnas.
SELECT JOBCODE + 10 . . .

Los operadores aritmeticos se pueden usar con columnas de datos defini-


dos como INTEGER, SMALLINT, DECIMAL, o FLOAT, con constantes numericas,
y variables.

El valor de la expresion aritmetica se asigna a una variable, pero no


reemplaza al valor de la columna de la tabla o vista.

FUNCIONES BUILT-IN
__________________

Permiten obtener informacion acerca de las filas que satisfacen la con-


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

AVG
___

Promedio de los valores de una o mas columnas que contengan datos nume-
ricos.

MAX
___

Maximo valor de una o mas columnas.

MIN
___

Minimo valor de una o mas columnas.

17/58
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

. 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 DECLARE


CURSOR, cuando se pretenda actualizar una columna o borrar una fila.

GROUP BY
________

Divide las filas que satisfacen la condicion de busqueda en grupos, se-


gun una o mas columnas especificadas en esta clausula. El resultado de
la aplicacion de una funcion BUILT-IN, no sera ya un valor unico, sino
tantos valores como grupos. Si hay valores nulos en una columna especi-
ficada en GROUP BY, el DB2 los considera en un grupo por separado.

Ejemplo:
Calculo del salario medio por departamento el resultado sera una fila
por departamento al no especificar WHERE, se procesan todas las filas.

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
18/58
END-EXEC

Es posible agrupar por mas de una columna.

Ejemplo:

Calculo del salario medio por departamento y por sexo. El resultado


seran dos filas por departamento (una por cada sexo), para las cuales
se calculara el promedio.

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 se


desean los grupos que satisfagan una condicion.

Se codifica como la clausula WHERE, pudiendo contener predicados multi-


ples, la clausula DISTINCT, HAVING NOT, y funciones BUILT-IN.

Ejemplo:
Calculo del salario medio de las mujeres por departamento, pero solo
para los departamentos en los que todos los empleados poseen un nivel
de educacion igual o superior a 16.

EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT WORKDEPT, AVG(SALARY), MIN(EDUCLVL)
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 se


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

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


en la SELECT.

Por defecto se toma orden ascendente. Si se encuentran valores nulos


son tratados como los mas altos. Los caracteres graficos se ordenan
en secuencia EBCDIC.

Se pueden especificar secuencias de orden secundarias.

Ejemplo:

Recuperar el nombre y numero de departamento de las mujeres empleadas


ordenado por numero de departamento descendente, y dentro de cada
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 unica
tabla de resultados, eliminando las filas duplicadas. Se usa para mez-
clar valores de varias tablas, pero el conjunto de filas seleccionadas
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 instru-


ccion SELECT deben ser identicos. Por ejemplo, SELECT A, B UNION X, Y
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 deben
usar numeros, y nunca nombres de columnas.

Para identificar de que instruccion SELECT procede cada fila, se inclu-


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 SELECT


en la ultima columna de la fila.

Ejemplo:

EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNO
FROM DSN.EMP1
WHERE WORKDEPT = :WORK-DEPT
20/58
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 una


parte de las columnas procedieran de una tabla, y otra parte de otra.
Si coinciden los nombres de columna de dos tablas, habra que calificar-
los, poniendo como prefijo el nombre de la tabla.

En la instruccion SELECT se listan los nombres de las columnas que se


quieren. Si en su lugar se coloca un *, el DB2 devuelve una fila forma-
da por todas las columnas de la primera fila, unido a todas las de la
segunda.

Si no se especifica la clausula WHERE cada fila de la primera tabla es


concatenada a cada fila de la segunda tabla para formar una tabla de
resultados, cuyo numero de filas sera el producto del numero de filas
de cada tabla.

Ejemplo:
A=3 B=2 AB=6

Este metodo se puede usar para crear una vista, pero esta no puede ser
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 vista
no puede ser unida con otra tabla.

Ejemplo:

Queremos recuperar las columnas EMPNO y LASTNAME de la tabla DSN.EMP1,


y las columnas ACTNUM y EMPTIME de la DSN.EMP2.

EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMP1.EMPNO, LASTNAME, ACTNUM, EMPTIME
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


_______________________________________

21/58
Todas ellas se pueden codificar con NOT.

BETWEEN ... AND


_______________

Especifica que la condicion debe ser satisfecha por cualquier valor que
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 de la
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 de la
columna especificada es similar al que se proporciona. El grado de pa-
recido es determinado por dos caracteres especiales usados en la cadena
que se incluye en la condicion de busqueda:

. Un '_' para cualquier caracter simple


. Un '%' para una cadena de caracteres. A no ser que el % preceda a
la cadena de caracteres, la cadena buscada puede comenzar en cual-
quier parte de la columna

Se usan cuando no se conocen todos los caracteres de una columna o no


importa su contenido.

Ejemplo:

. Para encontrar todos los empleados que viven en San Jose, debemos es-
tar seguros de que San Jose no es parte del nombre de otra ciudad,
porque el DB2 nos devolveria tambien esa fila.

WHERE TOWN LIKE '%SAN JOSE%'

. Para encontrar todos los empleados que viven en ciudades que comien-
den por SAN.

WHERE TOWN LIKE 'SAN%'

IS NULL
_______

Indica que se esta interesado en las filas para las que el valor de la
columna especificada es nulo.

22/58
WHERE CODIGO IS NULL

Para indicar que se esta interesado en las filas para las que el valor
de la columna especificada es blancos.

WHERE CODIGO = ' '

VISTAS
______

CONCEPTO
________

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


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

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


acceder solo a los datos que necesita. Las vistas se pueden usar inter-
cambiablemente con las tablas cuando se recuperan datos, y pueden deri-
varse de una o mas tablas. Puede tener nombres de columnas diferentes
de los nombres de las tablas.

Las funciones de una vista son:


- Seguridad: No permitir el acceso de algunos usuarios a todos los
datos de una tabla.

- Hacer disponible a una aplicacion un subconjunto de una tabla, con


lo cual es mas facil codificar instrucciones SQL ya que solo se ven
las columnas y filas de una tabla que se necesitan.

Una vista basada en una tabla de empleados puede contener filas solo
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 mas
columnas

Cuando se actualizan los datos de una vista, se actualizan los datos


de la tabla de la que se deriva, y, al contrario, si los datos de una
tabla cambian, los datos accesibles a traves de vistas basadas en la
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 fila
debe tener un valor para cada columna de la tabla que no posee un
valor por defecto.

23/58
Si se crea una vista usando funciones BUILT-IN o las clausulas DISTINCT
o GROUP BY, solamente es posible usar la instruccion SELECT para ella.

Si una columna de una vista es definida por medio de una expresion arit-
metica, no se podra actualizar la columna o insertar filas en la vista.

Si se crea una vista especificando 'WITH CHECK OPTION', todas las inser-
ciones y actualizaciones contra la vista son chequeadas antes para com-
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.

No se puede crear un indice para una vista.

Si la instruccion SELECT usada para crear una vista contiene un * en


lugar de una lista de columnas, y mas tarde alguien a¤ade otra columna
a la tabla en la cual se basa la vista, la nueva columna no aparecera
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 que


resulta de ella en la clausula WHERE o HAVING de nivel superior, ya que
puede existir una SUBQUERY dentro de otra, hasta cinco, e incluso, pue-
de haber varias condiciones de busqueda conectadas por operadores rela-
cionales, cada una con SUBQUERYS.

La instruccion SELECT de una SUBQUERY solo puede especificar 1 columna,


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 si la
SELECT es parte de una DECLARE CURSOR, INSERT o CREATE VIEW.

Cuando la instruccion de nivel superior es UPDATE o DELETE la SUBQUERY


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 >
24/58
(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 comparado de


una determinada forma con todos los valores que devuelva la SUBQUE-
RY.

Ej: WHERE EXPRESION > ALL SUBQUERY

para satisfacer la WHERE, el valor de la expresion debe


ser mayor que todos los valores devueltos por la SUBQUERY.
Si la SUBQUERY no selecciona ningun valor la condicion es
satisfecha.

. ANY, para indicar que el valor proporcionado debe ser comparado de


una determinada forma con cualquiera de los valores que devuelva
la SUBQUERY.

Ej: WHERE EXPRESION > ANY SUBQUERY

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


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

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


una fila que cumpla la condicion de la SUBQUERY.

25/58
Ejemplo:

WHERE EXISTS SUBQUERY

No es necesario especificar nombres de columna en la SELECT, sino *,


ya que la SUBQUERY no va a devolver datos.

SUBQUERY CORRELATIVA
____________________

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


el resultado en la parte derecha de la condicion de busqueda, y evalua
la SELECT de nivel superior segun el valor de la condicion de busqueda.

Una SUBQUERY correlativa se ejecuta una vez para cada fila de la tabla
o vista mencionada en la SELECT de nivel superior, de forma que se eva-
lua la SUBQUERY para cada fila.

Se usa para calcular algun valor que puede ser diferente para cada fila.

Es igual que una normal excepto porque despues de especificar el nombre


de la tabla en la clausula FROM, proporcionamos un nombre de correla-
cion, variable que representa la fila actual. Para especificar la corre-
lacion se prefija el nombre de columna con un nombre de correlacion.

OTROS EJEMPLOS
______________

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


deben referirse a diferente tabla.

En una INSERT, ni la SUBQUERY ni la SELECT de nivel superior dentro


de la INSERT, pueden basarse en la misma tabla en la que se inserta.

. Con una SELECT


______________

Esta SELECT recuperara las columnas especificadas para cada empleado


cuyo JOBCODE es superior a la media de su departamento.

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.WORKDEPT)
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :DEPT, :CODE
END-EXEC

26/58
. 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 programa

- 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 de una


vista. La vista se crea cada vez que es referenciada por una instru-
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


27/58
PANELES
_______

1) Panel Principal
_______________

. Especificar un archivo de entrada,


_________________________________ que contiene las instrucciones
SQL que se quieren ejecutar, cuya longitud de registro sera de 80

. Especificar un archivo de salida


_________________________________, que recoge cada instruccion y
el resultado de la ejecucion, que seran los datos recuperados en
una SELECT, o un SQLCODE en otras. Tambien incluye estadisticas.

. Especificar las opciones de proceso


___________________________________ (YES por defecto)

- CHANGE DEFAULTS: Poniendo YES se accede al panel de opciones


por defecto.

- EDIT INPUT: Editar o no el archivo de entrada.

- EXECUTE: Ejecutar o no las instrucciones del archivo de entrada

- AUTOCOMMIT: Dar o no un punto de COMMIT.

- BROWSE OUTPUT: Displayar o no el archivo 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 base


de datos leidos o cambiados por SPUFI no pueden ser cam-
biados por otro programa hasta que SPUFI alcance un pun-
to de COMMIT.

CS (CURSOR STABILITY), garantiza que ningun programa puede


modificar los datos de una fila en la cual SPUFI tiene
posicionado un cursor. Esto proporciona maxima concu-
rrencia.

- MAX SELECT LINES: Por defecto 250.


Maximo numero de filas que devolvera una SELECT.

. Definir caracteristicas del archivo de salida


_____________________________________________

- RECORD LENGTH: Por defecto 4092.


No puede ser menor que la del archivo de entrada.

- BLOCK SIZE: Por defecto 4096.

- RECORD FORMAT: Por defecto VB.


28/58
- DEVICE TYPE: Por defecto SYSDA.

. 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 vez


que se completa la ejecucion se displaya este panel, en el que se
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

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 acerca


del resultado de la ejecucion de cada instruccion SQL.

WORKING-STORAGE SECTION
EXEC SQL
INCLUDE SQLCA
END-EXEC

Con esta instruccion el precompilador incluira:


29/58
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, especifi-


cando nombre de la tabla y listando cada columna y su tipo de dato.

EXEC SQL
DECLARE DSN.TDEPT TABLE
(DEPNUM CHAR(3) NOT NULL,
DEPNOM VARCHAR(36) NOT NULL)
END-EXEC

. Previamente a la precompilacion con el DCLGEN.


Para incluir en el programa las declaraciones producidas por DCLGEN

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, ni


nombres de entradas externas o de plan que comiencen por DSN, ya
que estan reservados para el DB2.

No se pueden usar constantes figurativas como ZERO o SPACE en instru-


cciones SQL.

VARIABLES Y ESTRUCTURAS HOST

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


la WORKING STORAGE o en la LINKAGE SECTION, y especificados en la
opcion INTO de una instruccion SELECT o FETCH, en los cuales se ponen
los valores de los datos recuperados por el DB2. Las variables HOST
30/58
se codifican en las instrucciones SQL precedidas por dos puntos.

Una estructura HOST es un conjunto de variables HOST definidas en la


DATA DIVISION del programa. Puede tener un maximo de dos niveles, ex-
cepto la declaracion de una cadena de caracteres de longitud variable
que requiere un numero de nivel 49. Para identificar un campo dentro
de una estructura en una instruccion SQL se codificara el nombre de
estructura seguido de un punto y el nombre del campo.

La parte entera de un numero nunca es truncada, si un numero no cabe


en una variable o en una columna, se trunca la parte decimal si tie-
ne y si no da un error.

La declaracion de variables HOST se hace en niveles 01 o 77 (las de


nivel 77 no pueden ser usadas en instrucciones SQL).

Una cadena de caracteres de longitud variable debe tener un nivel de


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).

VARIABLES INDICADOR

Una variable indicador es un entero de media palabra.

La variable indicador se especifica precedida de dos puntos inmedia-


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 asociada.

Si el valor de la columna que se esta recuperando es nulo el DB2 po-


ne un valor negativo en la variable indicador ( si no se usara esta
daria un error), y el valor de la variable HOST no se alterara.

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

Si la variable indicador contiene un entero positivo, este especifica


la longitud original de la cadena.

. Colocar un valor nulo en una columna

Cuando se procesa una instruccion UPDATE el DB2 chequea la variable


indicador. Si esta contiene un valor negativo, el valor de la colum-
na se pondra como nulo. Si contiene un valor mayor que -1 la varia-
ble asociada contiene un valor para la columna.

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


31/58
SQLCAID

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

SQLCABC

Entero de una palabra que especifica la longitud de la SQLCA. Su va-


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 describe


una condicion de error.

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

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


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

SQLWARN1

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


narlo en una variable HOST.

SQLWARN2

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


argumentos de una funcion.

SQLWARN3

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


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 WHERE.

5) MANEJO DE CONDICIONES EXCEPCIONALES: INSTRUCCION WHENEVER

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


32/58
o bifurque a otra area del programa si encuentra un error. Puede es-
tablecerse mas de una WHENEVER para una misma condicion a lo largo
del programa, de forma que una WHENEVER afecta a todas las instru-
cciones SQL siguientes hasta que se encuentre otra.
Ejemplo:

EXEC SQL
WHENEVER CONDICION ACCION
END-EXEC

Se pueden especificar tres condiciones:

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


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 encon-
trar una fila que satisfaga la instruccion SQL o cuando no hay mas
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 da-


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 IN

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 satisfagan


las condiciones de busqueda el DB2 nos devuelve un SQLCODE = 100
en la primera FETCH que se haga.
33/58
- SELECT SUM(COLUMNA) EN COBOL:

Si no se efectuo la suma -no existen filas para las condiciones de


busqueda- el valor que se devuelve en el campo resultado de la
suma sera nulos y en determinados casos se produce un SQL = -305.
Conclusion: Preveerlo en cobol utilizando indicador variable
que devolvera valor negativo si el campo al que esta
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.

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.


34/58
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 . . .

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.
35/58
IF SQLCODE NOT = CORRECTO AND
SQLCODE NOT = NOENCONTRADO
THEN
MOVE 'DECLARE-CURSOR1' TO WS-PARRAFO
MOVE 'FVACARTV' TO DET8-TABLA
PERFORM FIN-DB2.

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.

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

(MAX)

EXEC SQL
SELECT MAX(SALARIO)
INTO :CAMPO1
FROM TABLA1
WHERE DEPARTAMENTO = 'AX21'
36/58
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).

RECOMENDACIONES PARA EL DISEÑO DE APLICACIONES EN DB2


_____________________________________________________

WLM.-IBM

Son varias las funciones involucradas en la


implementacion de una aplicacion en DB2, debiendo tener en
cuenta el que una misma persona puede realizar mas de una
funcion.

Las principales funciones que sera necesario


desarrollar
son:

ADMINISTRACION DE DATOS

Las tareas a desarrollar consisten en, sobre la base de


tener una vision corporativa de los datos, desarrollar
modelos logicos y mantener diccionario de datos, ademas de :

* Establecer convenciones para la denominacion de las


entidades de datos, las relaciones entre datos y los
37/58
atributos importantes.

* Definir reglas de integridad de datos.

* Desarrollar vistas de usuario.

* Soporte al Administrador de base de datos y a los


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 creacion


de objetos DB2, tales como tablas, vistas e indices,
incluyendo ademas:

* Dise¤o de modelos fisicos de datos.

* Desarrollo de nombres estandard para objetos DB2 , tales


como espacios de tablas, tablas, indices y vistas.

* Definicion y creacion de objetos DB2.

* Asistir a los analistas de aplicaciones en los prototipos


funcionales.

* Desarrollar modelos de JCl para utilitis.

* Recomendaciones de procedimiento de backup/recovery para


las tablas de aplicacion.

* Soporte a los programadores de aplicaciones en la prueba de


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 el


subsistema DB2. Normalmente esta funcion no existe al
inicio, y entonces es compartida por el Administrador de la
Base de Datos y el Programador del Sistema. Las
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 del


sistema y al operador.

* Suministrar informacion a la funcion de planificacion de


capacidad.

* Establecer directrices de backup y recuperacion.

* Controlar y perfeccionar el funcionamiento del subsistema


38/58
DB2.

* Participar en las revisiones de dise¤o.

* Realizar diagnostico de errores,tanto del sistema como de


aplicaiones.

* Establecer directrices para el uso de las funciones de


seguridad del subsistema DB2 y coordinar su uso con la
funcion de seguridad de la organizacion de administracion.

PROGRAMADOR DEL SISTEMA DB2

Esta funcion es similar a la tradicional de programador


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

* Instalacion de los productos prerrequisito.

* Instalacion de DB2 y otros productos relacionados.

* Implementar procedimientos para la determinacion de


problemas.

* Aplicar mantenimiento de sw.

* Ejecutar las herramientas de medicion de rendimiento y


control, suministrando la informacion a las funciones de
ADMINISTRACION DEL SUBSISTEMA DB2 Y DE PLANIFICACION DE
CAPACIDAD.

* Implementar procedimiento de backup y recovery.

* Suministrar autorizacion inicial.

* Desarrollar procedimientos de operacion y entrenamiento de


operadores.

OPERACION DEL SYSTEMA DB2

Esta responsabilidad incluye:

* Arrancar, parar y controlar el subsistema DB2.

* Controlar los mensajes del DB2 y tomar las acciones


pertientes.

* Comunicacion con los demas operadores del sistema ( CICS,


TP).

ANALISIS DE APLICACIONES
________________________

Esta funcion tiene la responsabilidad de determinar y


documentar los requerimientos de la aplicacion, incluyendo la
definicion de las relaciones entre los datos y los modelos de
uso. En concreto, esta responsabilidad incluye:
39/58
* Definicion de los requerimientos de la aplicacion.

* Definicion de las relaciones entre datos y modelos usados

* Desarrollo del dise¤o logico de la aplicacion.

* Definir las especificaciones de los programas.

* Coordinar las revisiones del dise¤o.

* Coordinar las pruebas integradas de programas.

PROGRAMACION DE APLICACIONES

Esta funcion es responsable del desarrollo de programas


e incluye:

* Codificar y probar programas.

* Implementar las reglas de integridad de datos.

* Codificar rutinas comunes, tales como rutinas de salida,


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 de


pruebas.

* Desarrollar procedimientos de backup y recuperacion para la


aplicacion.

SOPORTE DE CENTRO DE INFORMACION

El requerimiento de esta funcion surgira si se van a


utilizar herramientas orientadas a usuarios finales, tales
como QMF o AS. Las responsabilidades que incluye esta
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 los


datos que requieren.

* Controlar el uso de disco por los usuarios finales.

* Desarrollo de consultas comunes y complejas.

REPRESENTANTES DE LOS USUARIOS


______________________________

Las responsabilidades iniciales de los usuarios son:

* Asesoramiento en la identificacion y definicion de las


40/58
entidades de la empresa y de sus procesos.

* Definicion de las reglas de integridad.

* Definicion de los objetivos de seguridad, disponibilidad y


rendimiento.

* Pudiendo tambien involucrarse en la fase de desarrollo de


la aplicacion,para facilitar la creacion de prototipos de
cons4 -- e informes.

En una fase inicial, las funciones de ADMINISTRACION DE


DATOS Y ADMINISTRACION DE BASES DE DATOS, pueden ser asumidas
por una sola persona.

Igualmente que en el caso anterior, las funcioones de


PROGRAMACION DEL SISTEMA DB2 y ADMINISTRACION DEL SISTEMA
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 DB2
|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.

|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 observa


existen algunas que solo es necesario realizarlas una vez,
otras que habra que realizarlas ciclicamente y finalmente
aquellas que son propias de cada aplicacion a desarrollar.

Del conjunto de funciones expuestas, sera necesario


41/58
asignarlas a personas que formen parte del Proyecto y que al
menos seran:

* Una persona como Administrados de Base de Datos y


Administrador de Datos.

* Dos analistas de aplicaciones, uno actuando como lider del


proyecto.

* Dos o mas programadores de aplicaciones.

* Una persona, con el papel de Programador del Sistema y


Administrador de Datos del Sistema.

PLANIFICACION.
_______________

1.-Gestion del Proyecto.

Consistira en el desarrollo de la planificacion del


Proyecto , definiendo la duracion de cada una de las
tareas y la dedicacion a ellas de los recursos del equipo,
que en algunos casos no sera del 100%.

I5 Planificacion de la formacion y entrenamiento de los


diferentes miembros del equipo.

2.-Seleccion de la aplicacion piloto.

En la que participaran el administrador de la base de


datos y analista de aplicaciones.

Debera ser una aplicacion de bajo riesgo, que tenga un


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

3.-Definicion de Estandares.

Participaran en administrador de base de datos, el


administrador de datos, el programador del sistema y el
analista de la aplicacion.

Su actividad consistira en :

a) Denominacion de los objetos DB2, programas, copys,


transacciones, usuarios, jobs.

b) Directrices para el dise¤o de tablas y de la


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 y de


42/58
autorizaciones y responder a los requerimientos de auditoria.

Ser responsable el administrador del sistema, y aquel


personal que tenga la responsabilidad de mantener el entorno
de seguridad. Ademas participarna el administrador de bases
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 aplicacion.

Consistira en preparar el entorno de trabajo del


programador de aplicaciones, en cuya actividad participara el
administrador del sistema y el administrador de bases de
datos.

El entorno de trabajo estara integrado por Bibliotecas,


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 una


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¤aladas,


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 datos,


con la colaboracion del analista de aplicaciones.

4.-Desarrollo y prueba de programas.

Consistira basicamente en la codificacion y prueba de


43/58
los programas de la aplicacion, el responsable directo ser
el programador de aplicaciones y tambien participara el
analista de aplicaciones el el administrador de base de
datos.

Las tareas a realizar son:

* Crear datos de prueba.

* probar las llamadas SQL.

* Desarrollar los programas.

* Prueba unitaria.

* prueba integrada.

5.-Paso de Desarrollo a Produccion.

El responsable ser el lider del projecto y participara


todo el equipo en esta actividad, cyuas tareas mas
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 de


problemas.

* Mover definiciones de bases de datos (DDL).

* Crear Bibliotecas 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 usan


los caminos esperados.

* Establecer procedimientos de contabilidad.

El DB2 suministra rutinas de servicio llamadas


"attachement facilities" que conectan el programa de
aplicacion al DB2 para permitir usar sus servicios. El
comando DSN y sus interfases asociadas, DSNELI (para TSO o
Batch ), DSNCLI ( para CICS ) , son las facilidades standard
de conexion al DB2.

Por tanto cualquier programa de aplicacion es


totalmente dependiente de la conexion al DB2. Por ejemplo,
no se pueden cambiar los nombres de planes, antes de
finalizar la aplicacion. Si el DB2 termina, tambien
44/58
terminar la aplicacion.

DISEÑO DE BASES DE DATOS


________________________

INTRODUCCION.-
______________

En el proceso de dise¤o de bases de datos, deber a haber


una primera fase de dise¤o en la que se definiese la
"Arquitectura de datos" o "Modelo de datos corporativo", que
represente de forma general a la entidad, sin entrar en
detalles, simplemente a nivel de U Grupos de Datos y las
Relaciones entre estos U ( un empleado, un departamento, un
cliente, un prestamo, etc.), lo cual supondra el inicio del
dise¤o del Sistema de Informacion de la entidad.

Una vez cubierta la fase anterior, se iniciara el


proceso de analisis de cada una de las aplicaciones o
subsistemas definidos en el Sistema de Informacion, y por
consiguiente al "analisis de los datos" propios de la
aplicacion, definiendo entonces el contenido de pantallas,
informes y otros archivos que requiera el usuario.

DISEÑO LOGICO DE BASES DE DATOS


_______________________________

A)ANALISIS DE DATOS.
____________________

1)Establecer normas de denominacion de los datos para


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

2)Durante la elaboracion del modelo de datos, nuevas


U entidades U se crearan siempre que dos entidades se
U relacionen U en una forma varios a varios.

Un ejemplo podra ser que un cliente ha prestado varios


avales y que un aval ha sido hecho por varios clientes. Lo
cual nos llevara a aconsejar la creacion de una ta bla
extra de Avales/clientes.

En esta fase se definiran tambien los atributos de las


relaciones y de las entidades. En consecuencia los
diferentes items de datos que integran una entidad y
mediante que claves y tipos de las mismas estableceremos
las relaciones entre las diferentes entidades.

3)En la teoria relacional, clave primaria o candidata no


implica camino de acceso o secuencia.

4)Foreign keys son frecuentemente buenas candidatas para el


rendimiento de indices. (se puede usar en joins).
45/58
Las Foreign Keys son las llamadas "claves ajenas", es decir
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 a


normalizar las entidades (tablas) en tercera forma normal.

1)Primera forma normal. Consiste en la eliminacion de los


campos repetitivos mediante la creacion de una nueva
entidad. La cual incluye una Foreign Key en la nueva
entidad, para asi poder realizar JOIN con las dos
entidades.

La importancia de esta normalizacion, viene dada


fundamentalmente por la eliminacion de campos repetidos que
dara lugar a un no deseado mantenimiento de los campos
implicados.

2)Segunda forma normal. Consiste en determinar que datos


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

3)Tercera forma normal. Consiste en determinar que datos


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

La importancia de la normalizacion en segunda y tercera


forma normal, consiste en evitar anomalias de actualizacion
( en especial en lo que se refiere a la integridad de
datos, tal como borrado desintencionado de registros ). Si
una tabla contiene campos no dependientes de la clave
primaria completa, entonces podran darse anomalias en la
actualizacion.

C)INTEGRIDAD REFERENCIAL
________________________

La integridad referencial puede ser definida como:

* Siempre que se necesita cambiar una tabla (insertar,


actualizar, borrar), que condiciones deben existir en las
otras tablas?.

* Siempre que se modifica una tablas, que otras tablas


deben ser cambiadas?.

46/58
Estos aspectos afectan al desarrollo, a la planificacion de
la recuperacion, etc.

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


una funcion del DB2, la cual asegura la validacion de las
relaciones entre una y otra tabla. Se pueden definir
criterios referenciales, por ejemplo el que un empleado no
pueda ser dado de alta en una departamento si este no
existe. Tambien que una fila de una tabla de departamentos
no puede ser borrada, mientras existan empleados asignados
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 derivables, se


almacenaran en una tabla.

* NORMALIZACION DE LOS DATOS, PARA EVITAR:

Restricciones artificiales en la aplicacion.


Almacenamiento redundante de datos. (excepto para
Foreign Keys).

Cualquier posible anomalia en la actualizacion.

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


_________________________________________________________

* Implementar las reglas de integridad referencial


definidas al dise¤ar las bases de datos.

* Definir e implementar las unidades logicas de


trabajo.(LUW)

Para en cada una de ellas poder establecer los puntos


de Commit en los programas batch o de Sync en los
interactivos.

Esto es un aspecto importante en cuanto a integridad y


rendimiento.

-Una orientacion en programas interactivos puede ser:


Dise¤ar la aplicacion de tal modo que una LUW se
corresponda con cada pantalla que se visualiza.

Siempre que haya un CICS RETURN supone un Sync


implicito.

Evitar cancelaciones, de tal forma que cualquier codigo


de retorno imprevisto, suponga un rollback y mensajes al
usuario, ademas de escribir la SQLCA en un archivo de
47/58
errores.

Una LUW se corresponde con el uso de un thread, cuyo


tiempo debe minimizarse, por cuanto supone asignar
recursos ( plan, DBD's, espacio de tablas, indices );
por ello el thread debe procurar liberarse cuando se
dialoga con el terminal. Debe tambien recordarse que el
Rollback actua desde el ultimo commit o sync.

-Una orientacion en programas batch puede ser:

En programas de significada actividad de actualizacion


ser necesario usar Commit y prever restauracion logica.

Las Commit deberan hacerse cada cierto numero de LUW, en


base a cuantos bloqueos puede tener el IRLM ( esto es
aplicable a bloqueos de paginas o tambien cada 10 o 15
minutos.

No olvidar que todo programa batch que realice Commit


periodicos debe tener restauracion logica o debe poder
volver a ser ejecutado sin afectar a la integridad de
los datos.

RENDIMIENTO Y CONCURRENCIA EN BASE DE DATOS


___________________________________________

ALGUNOS DE LOS FACTORES CLAVES SON :


____________________________________

A)CONCURRENCIA.
______________

* Esperas por liberacion de bloqueos pueden esconder la


causa de un lento rendimiento.

* Pueden producirse fallos del SQL debido a que se


sobrepasa el numero de bloqueos concurrentes del IRLM o
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 son


leidas y/o escritas por el DB2,lo cual es funcion del plan
de acceso y la cardinalidad de las columnas.

-Informacion sobre la cardinalidad de las columnas esta


disponible en el Catalogo del DB2 ( en
SYSIBM.SYSCOLUMNS.COLCARD), para columnas que son la
primera de un indice. Informacion sobre la cardinalidad
de indices completos tambien esta disponible en el
Catalogo del DB2 (tabla SYSIBM.SYSINDEXES, columnas
FIRSTKEYCARD Y FULLKEYCARD.

-Informacion sobre el plan de acceso esta disponible va


48/58
DB2 EXPLAIN. Se puede usar para una sentencia SQL o para
una Plan completo. Esta informacion incluye:

Secuencia en la que los conjuntos (query-blocks) de


sentencias son procesadas. (ejemplos de sentencias SQL
que tiene varios query-blocks son subselects, UNIONs y
JOINs).

Secuencia de acciones dentro de un query-block.


Si se esta usando un indice. (se suministra el nombre)

Como se esta usando un indice (MATCHCOLS=0 indicara


busqueda por indice con mucho tiempo de ejecucion).

Si hay bloqueo a nivel de pagina o espacio de tabla.


(TSLOCKMODE). Cuando es igual a X o S reducira la
concurrencia.

Si se hace clasificacion y porque. (hay ocho columnas


de indicador de sort).

* LOS SIGUIENTES ASPECTOS AFECTAN A LA ELECCION DE UN PLAN


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, la


tablas y los indices, incluyendo:

-Tama¤o de la tabla.

-Cardinalidad de los indices.Indices con pocos valores


distintos son menos usados por el DB2.

-Como esta organizado el espacio de


tablas.(clustered?).

-Como estan organizados los indices,

-Cual es el nivel de actualidad de las estadisticas


respecto al estado actual de los datos(RUNSTATS).

* DEFINIR SOLAMENTE LOS INDICES IDONEOS (UTILES), LOS EXTRA


DEGRADAN PROGRAMAS DE USUARIO Y DE UTILIDAD.

* TABLAS E INDICES BIEN ORGANIZADOS REDUCEN I/Os.

El catalogo del DB2 nos informa de este nivel de


organizacion.

* IMPRESCINDIBLE EL USO DE PROTOTIPOS.

DISEÑO FISICO DE BASES DE DATOS


________________________________

A continuacion vamos a ofrecer una serie de recomendaciones


49/58
en la definicion de los diferentes objetos del DB2: Grupos
de almacenamiento, Bases de datos, Espacios de tablas,
Tablas, Indices y Vistas.

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


considerar la posibilidad de desnormalizar las tablas,
almacenando los datos duplicados para evitar la necesidad
del JOIN.

Habra que analizar el equilibrio entre el incremento del


coste del JOIN y el incremento del coste de mantenimiento
de datos duplicados.

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


que exista requerimiento por parte de la aplicacion. Cada
columna nula afecta negativamente al rendimiento y requiere
un byte extra por fila y ademas complican la logica del
programa, que debe verificar las nulas,

3)Colocar las columnas VARCHAR al final de la tabla. Este


tipo de columnas solo se definiran, cuando la variabilidad
del tama¤o sea significativo, unos 20 bytes de media.

4)El usar archivos Vsam definidos por el usuario, en lugar


de la definicion de grupos de almacenamiento, da mayor
flexibilidad en la operacion. Permitiendonos incrementar
espacios de tablas o indices y/o mover un archivo DB2 sin
tener que hacer descarga, borrado, y carga de la tabla.
se podra usar el REORG con UNLOAD o DSN1COPY para cambiar
de lugar archivos DB2).

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


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

6)Asignar un prefijo a los objetos DB2 por cada aplicacion,


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. programa
batch).

Recordar que este atributo se puede modificar antes y


despues de ejecutar un programa mediante el bind. Otra
solucion sera codificar LOCK TABLE en el programa.

En este caso tambien es aconsejable usar SUBPAGES = 1 en


los indices.

9)Usar LOCKSIZE ANY cuando se ha decidido bloqueo de pagina.


En este caso el DB2 actua de la siguiente manera:

* En el momento del BIND el DB2 elige normalmente bloqueo


de pagina, a excepcion de que ISOLATION = rr y scan de la
50/58
tabla se realize.

* Durante la ejecucion el DB2 escalara el bloque a nivel de


tabla si, y solamente si, el numero de paginas actualmente
bloqueadas en la tabla exceda al numero especificado como
limite en NUMLKTS.

En este caso subpages debe ser > 1 , en base al nivel de


actividad y al tama¤o de la tabla.

10)Usar CLOSE = NO a no ser que el archivo se use muy poco.

11)Todos los accesos a los datos deben de realizarse siempre


a traves de VISTAS, nunca a traves de las tablas base.
Incluso en el supuesto de que la VISTA sea igual a la tabla.
Tambien conviene definir sinonimos para cada vista, de tal
forma que los accesos sean independientes del creador de la
tabla o vista.Otras ventajas son:

* Incrementa la flexibilidad de la autorizacion : Los


usuarios de la vista tendran acceso solamente a las columnas
de la vista.

* Incrementa la simplicidad de las sentencias SQL: Limitando


el acceso al conjunto de filas y columnas que integran la
vista.

* Incrementa el control sobre los programas y sus accesos a


los datos.
( SELECT USER FROM SYSAPPL.USERVIEW )

12)Antes de cargar los datos crear siempre primero los


indices.

13)Considerar el particionar grandes tablas. La eleccion del


numero de particiones sera en base al tama¤o de la tabla, el
numero de indices, la configuracion de los discos y la
planificacion de utilidades.

* Facilita el REORG , COPY y RECOVER por particion.

* Facilita el reducir de tama¤o los archivos del DB2.

* Un aspecto importante es en que medida es particionable


la clave del cluster. Puede ocurrir que la naturaleza de
los datos dificulten una buena o aceptable distribucion de
las particiones. En caso de que la clave primaria la
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 al


35% del disco.

14)Normalmente usar solo PCTFREE, para establecer el espacio


libre.

51/58
15)En tablas peque¤as considerar espacio libre extra, para
reducir la contencion. Consideraciones generales entorno al
espacio libre son las siguientes:

* A mayor espacio libre:

-menor frecuencia de Reorganizacion.

-menor contencion.

-incremento del tiempo de ejecucion de los programas de ut.

-incremento de I/O de una sentencia SQL que acceda a


multiples filas.

-mayor ocupacion de disco.

16)Aspectos generales de almacenamiento, que pueden afectar


al rendimiento.

* En tablas de acceso muy frecuente, procurar colocarlas


en los discos mas rapidos y en los de cabecera.

* La anterior recomendacion aplicarla al Catalogo y al


Directorio del DB2.

* Igualmente con lo referente a los espacios de tablas


temporales del DB2. (usadas en join, subselect, order
by,..).

* Procurar evitar el uso de espacio secundario en datos e


indices, ajustando adecuadamente el tama¤o de las tablas.
El uso de espacios secundarios degrada el rendimiento.

* Cuando se usen grupos de almacenamiento, asignar un solo


volumen a cada grupo. Facilitara el control.

* Evitar usar mas del 75% de cada volumen.

SELECCION DE INDICES
____________________

La seleccion de indices es uno de los aspectos mas


importantes en el dise¤o, siendo la mas notable consecuencia
el rendimiento, ademas de permitirnos forzar la unicidad de
registros en donde la clave sea unica.

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


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

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


excepcion de que las pruebas demuestren una utilidad
importante.

3)En indices de multiples columnas, la secuencia de las


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

4)Es necesario analizar la relacion coste-beneficio existente


en cada indice candidato, antes de decidir su utilizacion.

* Los costes aumentan :

-Al realizar inserciones, borrados e incluso


actualizacion.

-Al procesar utilidades (LOAD, REORG, CHECK y RUNSTATS).

* Los beneficios son:

-Muy limitados si el DB2 tiene ya un indice alternativo


que le permitira realizar de forma eficiente la
sentencia SQL.

-Reduccion del tiempo de acceso a los datos.

-Reduccion del tiempo de proceso, al poder realizar


funciones sin tener que hacer una clasificacion previa.

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


el bound de los planes de la aplicacion, se debe analizar que
los indices definidos estan siendo usados eficientemente y
determinar las causas de situaciones diferentes, para poder
decidir si es necesario anular o crear otros indices.
Para ello s necesario trabajar sobre un entorno de tablas
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 sql


estaticas.

-si un indice no es usado, puede ser debido a unas sql


defectuosas o que sobra el indice.

-para las sql dinamicas hacer un seguimiento con el


Explain.

DISEÑO, CODIFICACION Y PRUEBA DE APLICACIONES


_____________________________________________

ACCESO DE DATOS
_______________

Hemos se¤alado anteriormente que los programas y consultas


almacenadas, accederan siempre a las tablas atraves de VISTAS
, lo cual hace que las sentencias sql sean independientes del
creador de las tablas y de los cambios de las mismas.

Otros aspectos importantes a tener en cuenta son:

53/58
1)Evitar que en las clausulas WHERE se den las siguientes
condiciones:

-Forzar hacer la conversion numerica para columnas


numericas. Para ello se deben hacer las variables o
literales host, del mismo tipo de datos, precision y
escala.

-Especificar una serie de caracteres mayor que la longitud


de la columna. Procurar siempre que la variable o literal
sea menor o igual en tama¤o.

-Codificar argumentos de busqueda que constituyan


predicados que el DB2 no pueda decidir su uso contra los
indices. Estos aspectos son ampliamente analizados en
GG24-3004.

2)Si hay varias tecnicas para codificar una sentencia SQL,


analizar cual de ellas es la mas eficiente.

3)Algunas tecnicas que ayudan a elegir el mejor camino de


acceso son:

a)Si se va a actualizar una columna de un indice, entonces


este indice no se considerara por el DB2 en sus criterios
de busqueda. El procedimiento aconsejable sera:

1)DECLARE y OPEN, una SELECT con el criterio de actualizar.

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 filas.

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


Prototipo previo.

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


se refiera a la misma columna y el operador de comparacion
sea =.

-Una alternativa al OR es UNION. Tener en cuenta que esta


opcion no presenta registros duplicados.

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


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

DESARROLLO Y PRUEBA DE PROGRAMAS


________________________________

54/58
1)Fase de prueba unitaria.
--------------------------

Cada desarrollador debe responsabilizarse de precompilar,


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

2)Fase de Prueba de la aplicacion.


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

Primero se debe determinar que usuario hace la


precompilacion, compilacion, linkedita y bind, evitando as
el que si otro usuario hace el bind del plan, el original
pierda la autoridad sobre el mismo.

Determinar que archivos se utilizaran en las pruebas para :

-codigo fuente.

-DBRM.

-Modulos.

-JCL's.

Prever un mecanismo para determinar que planes deben ser


rebound, cuando un programa se modifica. ( tabla del
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 de
optimizar el camino de acceso a los datos.

55/58
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, de


inmediato se debe:

1)RUNSTATS sobre los objetos afectados.

2)Todos los planes afectados por los cambios deben ser


rebound.

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


Entonces se debe de hacer inmediatamente:

1)Hacer un re-GRANT de autorizacion para la tabla y/o


vista.

2)Avisar a los usuarios afectados para re-CREATE sus


sinonimos para la tabla y/o vista.

3)Todos los planes afectados por el cambio debe ser


rebound. (*).

(*) Tambien despues de ALTER una tabla, un espacio de


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 el


DB2 vuelva a determinar sus caminos de acceso. Algunos casos
son:

-Despues de crear un indice para una tabla que ya tenia


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

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


con ISOLATION = CS (cursor stability, es aconsejable desde un
punto de vista de concurrencia, si se va a acceder una sola
vez a una fila en una transaccion, pero si se accede a la
misma file varias veces no se garantiza consistencia, por
tanto cuando existen razones de integridad se requiera
ISOLATION = RR (lectura repetible).
56/58
3)Para mejorar el rendimiento : BIND con RELEASE
(DEALLOCATE)

Para mejorar la concurrencia BIND con RELEASE (COMMIT).

Nota: En la preparacion de esta primera parte se ha


utilizado, basicamente, el GG24-3004-00 IBM DATABASE 2
APPLICATION DESIGN AND TUNING GUIDE, el SC26-4130-2
Development Guide y la publicacion DB2 APPLICATION
DEVELOPMENT RECOMMENDATIONS.

NUEVAS FUNCIONES Y MEJORAS DEL DB2 R3


_____________________________________

Resumimos en este apartado las mejoras que se


referencian en el manual GG24-3182 : IBM DATABASE 2 RELEASE
3 NOTEBOOK. En el citado manual existen tambien ejemplos
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 otro


valor especificado por el usuario,

Las nuevas funciones escalares son: DECIMAL, DIGITS,


FLOAT, HEX, INTEGER, LENGTH, SUBSTR, VALUE Y VARGRAPHIC.
Las anteriores funciones : MAX, MIN, COUNT, AVG y SUM,
ahora se denomina funciones de columna.

B)Nuevo operador de concatenacion para series.

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 cero


y otras operaciones de conversion y aritmeticas
57/58
invalidas.

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

G)Nuevos tipos de datos para numeros de simple precision


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 posible


a nivel de espacio de tablas.

* MODIFY .... (*) , que permite a un usuario borrar


todas las entradas en SYSIBM.SYSCOPY, de un espacio de
tablas, particion o archivo.

* RECOVERY INDEX que permite recuperar de una pasada una


lista de indices o todos los indices de un espacio de
tablas.

* RUNSTATS mejorado, al recojer mejores estadisticas para


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.


_____________________________________________________________________
_____________________________________________________________________

DB2.
____

NO SE DEBEN UTILIZAR VARIABLES DEFINIDAS EN NIVEL 01 DE


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

_____________________________________________________________________
____________________________________________________________________
58/58

También podría gustarte