Sunteți pe pagina 1din 44

Manual Básico DB2.txt

SSSSSSSSS

SSS

SSSSSSS

SSSSSSS

SSS

SSSSSSSSS

QQQQQQQ

QQ

QQ

QQ

QQ

QQ

QQ

QQ

QQQ

QQQQQQ QQ

LL

LL

LL

LL

LLLLLLLL

LLLLLLLLL

//

//

//

//

//

//

DDDDDDD

DDDDDDDD

DD

DD

DD

DD

DD

DD

DDDDDDDD

BBBBBBB

BBBBBBBB

BB

BBBBBBBB

BB

BBBBBBBB

BB

BB

222222222

222

2222222

2222222

222

222222222

CEPTOS.

INDICE

I

Conceptos

1

Tablas

1

Tipos de datos que puede contener una columna de una tabla 2

 

Indices

2

ANISMOS DE SEGURIDAD DE LOS DATOS.

Vistas

2

Racf (Resource Access Control Facility)

3

Passwords de ficheros Vsam

3

Autorizacion

3

ANISMOS DE INTEGRIDAD DE LOS DATOS.

Concurrencia

3

Recuperacion de datos

3

-

Unidad de recuperacion

3

Ayudas a la programacion

4

 

- Spufi

4

- Paneles para preparacion de programas

4

- Paneles para mantenimiento de planes

4

- DCLGEN (Declarations Generator)

4

- Online Help

5

RUCTURA DE UN PROGRAMA QUE OPERA EN UN ENTORNO CICS.

Estructura de un programa que opera en un entorno cics

5

Preparacion del programa para la ejecucion

5

-

Traslacion

5

Manual Básico DB2.txt

- Precompilacion

 

6

- Compilacion y link-edicion

6

- Binding

 

6

TRUCCIONES S.Q.L.

 

Instrucciones basicas

7

Clausula Where

8

Select into

8

Update

9

Delete

9

Insert

10

Insercion a la vez de varias filas de una tabla en otra

10

Funciones del cursor

11

Declare cursor

11

Open

12

Fetch

12

 

II

Whenever not found

 

13

Update

13

Delete

14

Close

14

Opciones de la instruccion select

15

- Operaciones aritmeticas

15

- Funciones Built-in

16

- Avg

 

16

-

Max

16

-

Min

16

-

Sum

16

-

Count

16

-

Clausulas Group by, Having y Order by

 

17

-

Group by

17

-

Having

18

-

Order by

18

-

Union

19

Seleccion de datos de varias tablas en una fila (join)

 

20

Opciones de las condiciones de busqueda

21

-

Between

And

21

-

In

21

-

Like

21

-

Is null

22

TAS.

Concepto

 

22

Proceso de una vista

23

Subquery

24

Formas de incluir una subquery en una clausula where o having

24

- Inmediatamente despues de un operador de comparacion

24

- Despues de un operador de comparacion seguido de all

o any

 

25

-

Despues de In, para indicar que el valor de la expre-

sion debe estar entre los valores devueltos por la sub-

query

 

25

-

Despues de Exists, verificacion de que puede ser en-

contrada una fila con la condicion de la subquery

26

Subquery correlativa

26

Otros ejemplos

26

- Con una SELECT

 

26

- Con una UPDATE

27

- Con una DELETE

27

FI.

Crear y probar instrucciones SQL

27

Creacion de una tabla

28

Creacion de una vista

28

Creacion de una tabla

28

Crear un nombre alternativo o sinonimo para una tabla o vista y dar de baja ese sinonimo

28

 

III

ELES.

Panel Principal

 

28

- Especificar un fichero de entrada

 

28

- Especificar un fichero de salida

28

- Especificar las opciones de proceso

29

Panel de opciones por defecto

29

- Especificar otras opciones de proceso

29

- Definir caracteristicas del fichero de salida

29

-

Especificar defectos para el formato de salida

30

Panel Commit/Rollback

30

Restricciones

30

Manual Básico DB2.txt IFICACION DE INSTRUCCIONES SQL EN UN PROGRAMA COBOL.

31

Describir cada tabla o vista a la que acceda el programa . 31

Definir un area de comunicacion llamada SQLCA

Codificar instrucciones SQL

32

- Variables y estructuras host

32

- Variables indicador

33

Manejo de codigos de retorno de errores : LA SQLCA

33

Manejo de condiciones excepcionales: Instruccion Whenever. 35

- Tres condiciones que se pueden especificar

 

36

- Dos acciones que se pueden especificar

36

Sugerencias para la codificacion de instrucciones SQL

36

-

Facilitar el uso de indices por el DB2

36

-

Facilitar la seleccion de datos de dos o mas tablas

36

Notas sobre DB2 / SQL

37

NDICE I.

Ejemplos de instrucciones sql en cobol II

 

37

- Distinct

37

 

- Count

38

- Sum

38

- Union

39

- Between (not between)

 

40

- In (not in)

40

- Like (not like)

40

- Group by

40

 

- Max

41

- Min

41

- Having

 

41

OMENDACIONES PARA EL DISEÑO DE APLICACIONES EN DB2.

 

Administracion de datos

 

42

Administracion de base de datos

42

Administracion del sistema DB2

43

Programador del sistema DB2

43

Operacion del sistema DB2

44

Analisis de aplicaciones

44

Programacion de aplicaciones

45

IV

Soporte de centro de informacion

 

45

Representantes de los usuarios

46

Macro actividades a desarrollar en un proyecto

46

- Planificacion

46

- Hw/sw

46

- Diseño y desarrollo aplicacion

46

- Operacion y recuperacion

47

- Gestion

47

NIFICACION.

 

Gestion del proyecto

 

47

Seleccion de la aplicacion piloto

47

Definicion de estandares

48

Identificar los recursos a proteger

48

EÑO Y DESARROLLO DE LA APLICACION.

 

Establecer el entorno de desarrollo de la aplicacion

 

48

Analisis de aplicaciones

49

Diseño de Base de Datos

49

Desarrollo y prueba de programas

49

Paso de desarrollo a produccion

50

EÑO DE BASES DE DATOS.

 

Introduccion

 

51

EÑO LOGICO DE BASES DE DATOS.

 

Analisis de datos

 

51

Normalizacion

52

Integridad referencial

53

EGRIDAD DE DATOS.

 

Un adecuado diseño de base de datos

 

53

- Analisis total de los datos

53

- Normalizacion de los datos

53

Un adecuado diseño de modulos, codificacion y pruebas

54

DIMIENTO Y CONCURRENCIA EN BASE DE DATOS.

 

Concurrencia

 

55

Trabajo realizado por el DB2 para el SQL

55

Diseño fisico de bases de datos

56

Seleccion de indices

60

CONCEPTOS

Manual Básico DB2.txt

1

El DB2 es un sistema de manejo de bases de datos basado en un mode relacional de datos. Rueda bajo sistema operativo MVS/SP como un s sistema de este:

+-------------+

¦ TERMINAL

¦ CICS/OS/VS ¦

+-------------+

¦

¦

+---------¦--------------------------------------------------

¦ v ¦ +------------+

¦ ¦ CICS/OS/VS ¦-------------+

MVS/SD Sistema Operativo

¦ +------------+

¦

¦

¦

¦

¦

v

¦

v

¦ +------------+

+-------+

+-----------+

¦

¦

IMS/VS

¦

DB2 ¦<-------

¦

TSO

y

¦

¦

¦

DB

¦

+-------+

¦

BATCH

¦

¦ +------------+

¦

+-----------+

+---------¦------------------¦-------------------------------

¦

¦

v

v

+----------+

+-----------+

+----------+ ¦ +----------+

¦

¦ Bases de ¦

¦

¦ Bases de ¦

 

¦

¦ Datos

¦--+

¦ Datos

¦----+

¦ IMS/VS

¦

¦

DB2

¦

¦ DL/I

¦

¦

¦

+----------+

 

+----------+

 

TABLAS

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

Un nombre de tabla esta formado por un identificador de la persona creo la tabla, y de un nombre descriptivo de esta, separados por p

2

TIPOS DE DATOS QUE PUEDE CONTENER UNA COLUMNA DE UNA TABLA

.

Cadenas de caracteres EBCDIC:

CHAR

- Cadenas de longitud fija

VARCHAR

- Cadenas de longitud variable

.

Datos numericos:

SMALLINT

- Enteros binarios de media palabra

INTEGER

- Enteros binarios de una palabra

DECIMAL

- Numeros decimales

FLOAT

- Numeros de coma flotante

.

Cadenas de caracteres graficos:

GRAFHIC

- DBCS (Double Byte Character Data) de longitud

VARGRAPHIC - DBCS de longitud variable

INDICES

El DB2 proporciona dos mecanismos de acceso a tablas, acceso secue y acceso directo mediante indices. El indice debe ser unico.

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

Manual Básico DB2.txt

el programa requiere.

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

MECANISMOS DE SEGURIDAD DE LOS DATOS

VISTAS

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

3

RACF (Resource Access Control Facility)

Proporciona control de acceso al DB2 por usuarios o aplicaciones n torizados, a los ficheros vsam que contienen las bases de datos, a dispositivo de acceso directo, etc.

PASSWORDS DE FICHEROS VSAM

Se usan en ficheros no protegidos con RACF.

AUTORIZACION

Mediante instrucciones GRANT y REVOKE de identificadores de usuari

MECANISMOS DE INTEGRIDAD DE LOS DATOS

CONCURRENCIA

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

La concurrencia es controlada mediante LOCKS. Consisten en asociar recurso DB2 con un programa, de forma que esta asociacion afecta a pueden acceder otros programas al mismo recurso. Existen varios ti

S (Share), U (Update), X (Exclusive), etc.

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

RECUPERACION DE DATOS

Unidad de recuperacion

Proceso que ocurre entre dos puntos de COMMIT. Es una secuencia de acciones que necesita ser completada para que cualquiera de las ac

4

nes individuales que la forman pueda considerarse como acabada.

Ejemplo:

Una transaccion que transfiere fondos de una cuenta A a otra B, de primero sustraer la cantidad a transferir de la cuenta A, y luego

a la cuenta B. Cuando se terminen ambas acciones, y no antes, los de ambas cuentas seran consistentes.

Una unidad de recuperacion se señala como completa mediante un COM Synchronization (Sync) Point, de las siguientes formas:

1. Implicitamente al final de una transaccion: EXEC CICS RETURN

3. Implicitamente

4. Implicitamente en un programa BATCH-DLI

Manual Básico DB2.txt

: EXEC DLI TERM

: EXEC DLI CHKP

Si ocurre una accion y otra no, se dice que la base de datos ha pe su integridad o consistencia. Para lograr que los datos recuperen valor que tenian antes de comenzar la unidad de recuperacion, se u opcion ROLLBACK para el comando SYNCPOINT.

AYUDAS A LA PROGRAMACION

Spufi:

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

Paneles para preparacion de programas:

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

Paneles para mantenimiento de planes:

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

DCLGEN (Declarations Generator):

para:

Usa la informacion del catalogo D

.

Crear definiciones de las estructuras de tablas o vist

que van a ser guardadas en librerias de Copys para su

.

ONLINE HELP:

terior inclusion en los programas.

Producir instrucciones SQL DECLARE TABLE

5

Proporciona ayuda durante la ejecucion del spufi.

ESTRUCTURA DE UN PROGRAMA QUE OPERA EN UN ENTORNO CICS

+-----------------------------------------------+

¦ APLICACION

 

¦

¦

¦

¦

1 - Area de datos <-----------+

 

¦

¦

2 - SQLCA

¦

¦

¦

¦

¦

¦

+-->

3 - Entrada al programa

¦

¦

¦

¦

4 - Tratar mensaje de entrada ¦

¦

¦

¦

5 - Proceso

¦

¦

¦

¦

6 - Instrucciones SQL ---+

¦

¦

¦

¦

7 - Mensaje de salida

¦

¦

¦

¦

¦

+-- 8 - Terminacion

¦

¦

¦

¦

¦

¦

¦

¦

¦

+---¦--¦----------------------------¦----¦------+

¦ ¦

¦

¦

¦ ¦

v

¦

+--------¦--------------+

+-----------+ -----> +-----

¦ ENTRY ¦

CICS/OS/VS ¦

¦ CICS/OS/VS¦

¦ DB2

¦ v

¦

+-----------+ <----- +-----

¦ EXIT

¦

+-----------------------+

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

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

PREPARACION DEL PROGRAMA PARA LA EJECUCION

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

b. Precompilacion del programa.

Manual Básico DB2.txt

6

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

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

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

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

Se relaciona el programa (el DBRM que representa las peticion SQL hechas por el programa) y las tablas y vistas DB2 que se ren procesar. Esto da lugar a un plan de aplicacion, el cual almacenado por el DB2 y usado cuando se ejecute el programa. El proceso de binding incluye los siguientes pasos:

.

Examinar la validez de los nombres de columnas, tabl

vistas utilizados en el programa

.

Verificar que la persona esta autorizada a realizar

operaciones de acceso especificadas por las instrucc SQL del programa

.

Seleccionar los caminos de acceso a los datos DB2 qu

programa quiere procesar

Cuando se va a hacer bind de una aplicacion se puede especifi

- Isolation level:

.

RR el lock afecta a todas las filas que toca el prog

.

CS el lock afecta a todas las filas a las que el pro

esta accediendo actualmente

Se puede hacer lock del espacio de tabla entero que contiene bla que se quiere proteger mediante una instruccion lock tabl

.

Para permitir a otras aplicaciones recuperar, pero n

tualizar, borrar o insertar filas se usa

EXEC SQL LOCK TABLE nombre_de_tabla IN SHARE MODE

END-EXEC

.

7

Para impedir que otras aplicaciones accedan a la tab

cualquier forma se usa

EXEC SQL LOCK TABLE nombre_de_tabla IN EXCLUSIVE MODE

END-EXEC

- Resource adquisition time

.

USE, por defecto

indica que se quieren adquirir los locks cuando los cios de tablas asociados sean accedidos por primera

.

ALLOCATE

indica que se quieren adquirir los locks cuando se a el plan de aplicacion

- Resource release time

.

COMMIT, por defecto

indica que se quieren liberar los locks en cada punt commit

.

DEALLOCATE

indica que se quieren retener los locks hasta que te el programa

- Explain pa h selection

. YES

se pide al DB2 informacion acerca de las decisiones Página 7

Manual Básico DB2.txt esta tomando en el establecimiento de caminos de acc a los datos

. NO

Si cambian las caracteristicas de la tabla o vista a la que a el programa, el plan de aplicacion ya no es valido, y el prog no puede ser ejecutado. Cuando se intenta hacerlo, el DB2 aut ticamente hace un rebind intentando crear un nuevo plan.

INSTRUCCIONES S.Q.L.

INSTRUCCIONES BASICAS

Las instrucciones en lenguaje S.Q.L. (Structured Query Language) p ten comunicar peticiones de acceso a datos al DB2. Es usado por el ministrador de la base de datos para crear y cambiar definiciones

8

datos, por el administrador del sistema en cuanto a autorizaciones usuarios de los datos, y por el programador de aplicaciones para r perar y actualizar datos.

La primera clausula de una instruccion SQL dice al DB2 que operaci quiere realizar.

Los nombres de variables van precedidos de ':'.

CLAUSULA WHERE

Especifica una condicion de busqueda que, identificara la fila o f que se quieren recuperar, borrar o actualizar. La condicion de bus puede estar formada por uno o varios predicados separados por AND

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

Ejemplos:

 

.

WHERE NOT WORKDEPT = 'C01'

.

WHERE EMPNO = :EMPID

.

WHERE JOBCODE + EDUCLVL > 70

.

WHERE SEX = 'V' AND (DEPT = 'C1' OR DEPT = 'C2')

SELECT INTO

Funcion

Recuperar una fila especifica.

Formato

EXEC SQL SELECT nombres_de_las_columnas que nos interesan INTO nombres_de_vbles usadas para contener los datos recupera FROM nombre_de_la_tabla o vista que contiene los datos WHERE condicion_de_busqueda END-EXEC

Se pueden especificar hasta 300 columnas en la clausula SELECT. Si quieren recuperar todas las columnas, en el mismo orden en que apa en la fila, se pondra un asterisco, en lugar del nombre de las col el valor de la primera columna especificada se guardara en la prim

9

variable especificada en la clausula INTO, el de la segunda en la gunda, etc.

Si ninguna fila satisface la condicion, el DB2 devuelve un codigo NOT FOUND (SQLCODE=100).

Si la clausula WHERE permitiera recuperar los valores de las colum de dos o mas filas, DB2 devuelve un codigo de error en el SQLCODE recupera nada.

Manual Básico DB2.txt

Si varias filas cumplieran la condicion, se usara una instruccion DECLARE CURSOR para seleccionar las filas, seguida de una instrucc FETCH para mover los valores de las columnas a las variables una f cada vez.

UPDATE

Funcion

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

Formato

EXEC SQL

UPDATE nombre_de_la_tabla o vista

SET

columnas que se quieren actualizar = nuevo valor

WHERE condicion_de_busqueda END-EXEC

El nuevo valor especificado para una columna puede ser el nombre d otra columna de la misma fila, una constante, una variable, una ex sion aritmetica, un valor nulo, etc. Si se omite la clausula WHERE, el DB2 actualiza cada fila de la ta o vista con los valores dados.

DELETE

Funcion

Quitar filas enteras de una tabla, no columnas especificas.

Formato

EXEC SQL

DELETE

FROM

nombre_de_la_tabla o vista

10

WHERE condicion_de_busqueda END-EXEC

Si se omite la clausula WHERE, se borraran todas las filas de la t bla o vista. Para borrar la definicion de una tabla, ademas de su contenido, se usa la instruccion DROP.

INSERT

Funcion

Añadir nuevas filas a una tabla o vista, se puede:

.

Especificar los valores de las columnas que se quieren insert

.

Incluir una instruccion SELECT en la INSERT para decir al DB2

los datos para la nueva fila estan contenidas en otra tabla o

Formato

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

Si se especifican menos nombres de columnas de los que hay en la f el DB2 les asigna valores por defecto.

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

.

Si la tabla tiene un indice unico, la fila no es insertada, y

DB2 proporciona un SQLCODE -803

.

Si la tabla no tiene un indice unico, la fila es insertada sin

INSERCION A LA VEZ DE VARIAS FILAS DE UNA TABLA EN OTRA TABLA Página 9

Manual Básico DB2.txt

Ejemplo:

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

11

EXEC SQL INSERT INTO USERA.EMPTIME (EMPNUMBER, PROYNUMBER, STARTDATE, ENDDATE) SELECT EMPNO, PROYNO, COMIENZO, FIN FROM DSN.EMP END-EXEC

En una SELECT embebida en una INSERT no se puede poner UNION ni OR

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

FUNCIONES DEL CURSOR

El cursor permite a un programa recuperar un conjunto de filas, y procesar una fila cada vez.

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

DECLARE CURSOR

Funcion

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

Formato

EXEC SQL DECLARE nombre_del_cursor

CURSOR FOR SELECT columna 1, columna 2

FROM WHERE FOR UPDATE OF

nombre_de_la_tabla columna 1 = condicion_de_busqueda

columna 2

(columnas

de cada fila que se

quieren actualizar)

END-EXEC

12

La instruccion DECLARE CURSOR nombra un cursor. La instruccion SEL define un conjunto de filas, que formaran la tabla de resultados.

Es posible actualizar una columna de la tabla identificada aunque sea parte de la tabla de resultados (que no haya sido nombrada en instruccion SELECT), nombrandola en la clausula FOR UPDATE OF.

Cuando DB2 evalua una instruccion SELECT, puede ocurrir que varias satisfagan la condicion de busqueda, y que algunas de ellas esten dadas. Para especificar que no se desean, se codificara:

SELECT DISTINCT columna 1, columna 2,

OPEN

Funcion

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

Formato

EXEC SQL OPEN nombre_del_cursor END-EXEC

FETCH

Funcion

Manual Básico DB2.txt

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

Formato

EXEC SQL FETCH nombre_del_cursor

INTO

variable 1, variable 2

END-EXEC

Cuando se utiliza la instruccion FETCH, el DB2 usa el cursor para tar a la siquiente fila de la tabla de resultados.

WHENEVER NOT FOUND

Funcion

13

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

.

Examinar si el SQLCODE tiene valor 100, esto ocurre cuando una

truccion FETCH ha recuperado la ultima fila de la tabla de res dos y se da otra FETCH. Ejemplo: IF SQLCODE = 100 GO TO NO-DAT

.

Codificar la instruccion WHENEVER NOT FOUND bifurcando a otra

del programa.

Formato

EXEC SQL WHENEVER NOT FOUND GO TO END-EXEC

UPDATE

Funcion

direccion_simbolica

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

Formato

EXEC SQL

UPDATE nombre_de_la_tabla

SET

WHERE CURRENT OF nombre_del_cursor

columna 1 = valor , columna 2 = valor

END-EXEC

Cada columna que se quiere actualizar debe haber sido nombrada pre mente en la clausula FOR UPDATE OF de la instruccion DECLARE CURSO La clausula WHERE identifica el cursor que apunta a la fila que va ser actualizada. Despues de actualizar una fila, la posicion del c permanece en esa fila hasta que se utilice una instruccion FETCH p la siguiente fila.

Con la instruccion UPDATE se actualizan varias filas con una sola

truccion SQL, mientras que UPDATE

una copia de la fila, examinarla, y entonces, actualizarla.

WHERE CURRENT OF, permite ob

DELETE

Funcion

14

Manual Básico DB2.txt

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

Formato

EXEC SQL DELETE FROM

nombre_de_la_tabla

WHERE CURRENT OF nombre_del_cursor

END-EXEC

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

borrada. Despues de borrar una fila, no se puede actualizar o borr utilizando ese cursor, hasta que se de una FETCH para la siguiente Con la instruccion DELETE se borran varias filas con una sola inst

ccion SQL, mientras que DELETE

WHERE CURRENT OF, permite obten

una copia de la fila, examinarla, y entonces, borrarla.

CLOSE

Funcion

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

Formato

EXEC SQL CLOSE nombre_del_cursor END-EXEC

Si el programa completa una unidad de recuperacion todos los curso abiertos son cerrados automaticamente por el DB2. Si el cursor se ve a abrir, el proceso comenzara al principio de la tabla de resul y se tendra que restablecer la posicion del cursor.

Ejemplo:

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

15

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

EXEC SQL

(valor actual

DECLARE EMPLEADO CURSOR FOR

del limite

SELECT EMPNO, SALARY FROM DSN.EMPL WHERE EMPNO > :UPD-EMP ORDER BY EMPNO

mas bajo)

END-EXEC

2. Abrir el cursor y mover los datos de la tabla de resultados fila cada vez, de forma que el limite mas bajo de la tabla s tualiza en UPD-EMP.

EXEC SQL

:

EXEC SQL

 

OPEN EMPLEADO

:

FETCH EMPLEADO

END-EXEC

:

INTO

:UPD-EMP, :UPD-SAL

:

END-EXEC

3. Borrar una fila

EXEC SQL DELETE FROM DSN.EMPL

WHERE

END-EXEC

EMNO = :UPD-EMP

4. Al abrir el cursor de nuevo, la condicion de busqueda de la procesara la DSN.EMPL basandose en el valor actual de UPD-EM

OPCIONES DE LA INSTRUCCION SELECT

OPERACIONES ARITMETICAS

La instruccion SELECT se puede usar para realizar operaciones arit cas con los datos antes de que sean proporcionados al programa. Es consigue mediante operadores aritmeticos en la lista de columnas. SELECT JOBCODE + 10

Los operadores aritmeticos se pueden usar con columnas de datos de Página 12

Manual Básico DB2.txt dos como INTEGER, SMALLINT, DECIMAL, o FLOAT, con constantes numer y variables.

El valor de la expresion aritmetica se asigna a una variable, pero reemplaza al valor de la columna de la tabla o vista.

FUNCIONES BUILT-IN

16

Permiten obtener informacion acerca de las filas que satisfacen la dicion de busqueda. Se puede incluir mas de una en cada instruccio LECT. La funcion BUILT-IN se aplica a cada fila que satisface la c cion de busqueda, ignorando los valores nulos.

AVG

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

ricos.

MAX

Maximo valor de una o mas columnas.

MIN

Minimo valor de una o mas columnas.

SUM

Suma del valor de una o mas columnas.

COUNT

.

Numero de filas que satisfacen la condicion de busqueda:

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

.

Numero de valores unicos de una columna en particular:

EXEC SQL SELECT COUNT (DISTINCT DEPTNO) INTO DST-COUNT FROM DSN-EMP END-EXEC

17

CLAUSULAS GROUP BY, HAVING Y ORDER BY

No se pueden especificar en una instruccion SELECT dentro de la DE CURSOR, cuando se pretenda actualizar una columna o borrar una fil

GROUP BY

Divide las filas que satisfacen la condicion de busqueda en grupos gun una o mas columnas especificadas en esta clausula. El resultad la aplicacion de una funcion BUILT-IN, no sera ya un valor unico, Página 13

Manual Básico DB2.txt tantos valores como grupos. Si hay valores nulos en una columna es ficada en GROUP BY, el DB2 los considera en un grupo por separado.

Ejemplo:

Calculo del salario medio por departamento el resultado sera una por departamento al no especificar WHERE, se procesan todas las fi

EXEC SQL DECLARE XYZ CURSOR FOR SELECT WORKDEPT, AVG(SALARY) FROM DSN-EMP GROUP BY WORKDEPT

END-EXEC

EXEC SQL FETCH XYZ INTO :WORK-DEPT, :AVG-SALARY

END-EXEC

Es posible agrupar por mas de una columna.

Ejemplo:

Calculo del salario medio por departamento y por sexo. El resultad seran dos filas por departamento (una por cada sexo), para las cua se calculara el promedio.

18

EXEC SQL DECLARE XYZ CURSOR FOR SELECT WORKDEPT, SEX, AVG(SALARY) FROM DSN-EMP GROUP BY WORKDEPT, SEX

END-EXEC

EXEC SQL FETCH XYZ INTO :WORK-DEPT, :SEX, :AVG-SALARY

END-EXEC

HAVING

Se usa seguida de la clausula GROUP BY, para especificar que solo desean los grupos que satisfagan una condicion.

Se codifica como la clausula WHERE, pudiendo contener predicados m ples, la clausula DISTINCT, HAVING NOT, y funciones BUILT-IN.

Ejemplo:

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

EXEC SQL DECLARE XYZ CURSOR FOR SELECT WORKDEPT, AVG(SALARY), MIN(EDUCL FROM DSN-EMP WHERE SEX = 'F' GROUP BY WORKDEPT HAVING MIN(EDUCLVL) >= 16

END-EXEC

EXEC SQL FETCH XYZ INTO :WORK-DEPT, :AVG-SALARY, :MIN-EDUC

END-EXEC

ORDER BY

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

19

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

Por defecto se toma orden ascendente. Si se encuentran valores nul Página 14

Manual Básico DB2.txt son tratados como los mas altos. Los caracteres graficos se ordena en secuencia EBCDIC.

Se pueden especificar secuencias de orden secundarias.

Ejemplo:

Recuperar el nombre y numero de departamento de las mujeres emplea ordenado por numero de departamento descendente, y dentro de c departamento por nombre de empleado.

EXEC SQL DECLARE XYZ CURSOR FOR SELECT EMPNAME, WORKDEPT FROM DSN-EMP WHERE SEX = 'F' ORDER BY WORKDEPT DESC, EMPNAME

END-EXEC

EXEC SQL FETCH XYZ INTO :PGM-NAME, :WORK-DEPT

END-EXEC

UNION

Permite combinar dos o mas instrucciones SELECT para formar una un tabla de resultados, eliminando las filas duplicadas. Se usa para clar valores de varias tablas, pero el conjunto de filas seleccion de una tabla es añadido al conjunto de filas seleccionado de otra.

Los tipos de datos y longitudes de las columnas nombradas en la in ccion SELECT deben ser identicos. Por ejemplo, SELECT A, B UNION X la columna A debe ser identica a la X, y la columna B a la Y.

Para especificar las columnas por las que se quiere ordenar se deb usar numeros, y nunca nombres de columnas.

Para identificar de que instruccion SELECT procede cada fila, se i ye una constante al final de la lista de cada SELECT.

SELECT A, B, 'A1' UNION X, Y, 'B1'

El DB2 devolvera la constante correspondiente a cada instruccion S en la ultima columna de la fila.

Ejemplo:

20

EXEC SQL DECLARE XYZ CURSOR FOR SELECT EMPNO FROM DSN.EMP1 WHERE WORKDEPT = :WORK-DEPT

UNION

SELECT DISTINCT EMPNO FROM DSN-EMP2 WHERE PROJNO = :NUM-PROY END-EXEC

EXEC SQL FETCH XYZ INTO :EMP-NUMBER

END-EXEC

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

Es posible formar una fila de la tabla de resultados para la cual parte de las columnas procedieran de una tabla, y otra parte de ot Si coinciden los nombres de columna de dos tablas, habra que calif los, poniendo como prefijo el nombre de la tabla.

En la instruccion SELECT se listan los nombres de las columnas que quieren. Si en su lugar se coloca un *, el DB2 devuelve una fila f da por todas las columnas de la primera fila, unido a todas las de segunda.

Si no se especifica la clausula WHERE cada fila de la primera tabl concatenada a cada fila de la segunda tabla para formar una tabla resultados, cuyo numero de filas sera el producto del numero de fi de cada tabla.

Ejemplo:

A=3 B=2 AB=6

Este metodo se puede usar para crear una vista, pero esta no puede Página 15

Manual Básico DB2.txt procesada mediante instrucciones UPDATE, DELETE o INSERT.

Es posible unir una tabla o vista consigo misma, y hasta 7 tablas. Ei se usa la clausula GROUP BY en la definicion de una vista, la v no puede ser unida con otra tabla.

Ejemplo:

Queremos recuperar las columnas EMPNO y LASTNAME de la tabla DSN.E y las columnas ACTNUM y EMPTIME de la DSN.EMP2.

21

EXEC SQL DECLARE XYZ CURSOR FOR SELECT EMP1.EMPNO, LASTNAME, ACTNUM, EMPTI FROM DSN.EMP1, DSN-EMP2 WHERE EMP1.EMPNO = EMP2.EMPNO END-EXEC

EXEC SQL FETCH XYZ INTO :EMP-NUMBER, :NAME, :ACTIV, :TIME

END-EXEC

OPCIONES DE LAS CONDICIONES DE BUSQUEDA

Todas ellas se pueden codificar con NOT.

BETWEEN

AND

Especifica que la condicion debe ser satisfecha por cualquier valo este comprendido entre los dos valores especificados.

WHERE EDUCLVL BETWEEN 13 AND 16

IN

Indica que se esta interesado en las filas para las que el valor d columna especificada esta entre los valores que se listan.

WHERE WORKDEPT IN ('A00', 'C01', 'E02')

LIKE

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

22

.

Un '_' para cualquier caracter simple

.

Un '%' para una cadena de caracteres. A no ser que el % prece

la cadena de caracteres, la cadena buscada puede comenzar en quier parte de la columna

Se usan cuando no se conocen todos los caracteres de una columna o importa su contenido.

Ejemplo:

.

Para encontrar todos los empleados que viven en San Jose, debemo

tar seguros de que San Jose no es parte del nombre de otra ciuda porque el DB2 nos devolveria tambien esa fila.

.

WHERE TOWN LIKE '%SAN JOSE%'

Para encontrar todos los empleados que viven en ciudades que com

den por SAN.

WHERE TOWN LIKE 'SAN%'

IS NULL

Manual Básico DB2.txt

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

WHERE CODIGO IS NULL

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

WHERE CODIGO = ' '

VISTAS

CONCEPTO

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

23

Una vista es como una ventana a traves de la cual un programa pued acceder solo a los datos que necesita. Las vistas se pueden usar i cambiablemente con las tablas cuando se recuperan datos, y pueden varse de una o mas tablas. Puede tener nombres de columnas diferen de los nombres de las tablas.

Las funciones de una vista son:

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

- Hacer disponible a una aplicacion un subconjunto de una tabla, lo cual es mas facil codificar instrucciones SQL ya que solo se las columnas y filas de una tabla que se necesitan.

Una vista basada en una tabla de empleados puede contener filas para un determinado departamento.

- Resumir datos de una tabla y hacerlos disponibles:

.

La suma de valores de una columna

.

El maximo valor de una columna

.

El promedio de valores de una columna

.

El resultado de una expresion aritmetica con una o m

columnas

Cuando se actualizan los datos de una vista, se actualizan los dat de la tabla de la que se deriva, y, al contrario, si los datos de tabla cambian, los datos accesibles a traves de vistas basadas en tabla tambien cambian.

PROCESO DE UNA VISTA

Una vista se puede crear via SPUFI.

Para insertar una fila en una tabla por medio de una vista, la fil debe tener un valor para cada columna de la tabla que no posee un valor por defecto.

Si se crea una vista usando funciones BUILT-IN o las clausulas DIS o GROUP BY, solamente es posible usar la instruccion SELECT para e

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

Si se crea una vista especificando 'WITH CHECK OPTION', todas las ciones y actualizaciones contra la vista son chequeadas antes para probar que la fila esta conforme con la definicion de la vista.

Si la vista es resultado de un JOIN, los datos de esta pueden ser seleccionados, pero no se puede insertar, borrar o actualizar.

24

No se puede crear un indice para una vista.

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

SUBQUERY

En una SELECT anidada en otra SELECT la primera se llama SELECT OUTER-LEVEL, y la interna SUBQUERY.

Cuando se usa una SUBQUERY el DB2 la evalua, y sustituye el valor resulta de ella en la clausula WHERE o HAVING de nivel superior, y puede existir una SUBQUERY dentro de otra, hasta cinco, e incluso, de haber varias condiciones de busqueda conectadas por operadores cionales, cada una con SUBQUERYS.

La instruccion SELECT de una SUBQUERY solo puede especificar 1 col 1 funcion BUILT-IN o 1 expresion aritmetica.

Una SUBQUERY no puede contener una clausula ORDER BY.

Cuando la instruccion de nivel superior es otra SELECT:

.

La SUBQUERY puede basarse en la misma tabla o vista o en otra

.

Se puede usar una SUBQUERY en una instruccion WHERE incluso s

SELECT es parte de una DECLARE CURSOR, INSERT o CREATE VIEW.

Cuando la instruccion de nivel superior es UPDATE o DELETE la SUBQ no puede basarse en la misma tabla o vista.

FORMAS DE INCLUIR UNA SUBQUERY EN UNA CLAUSULA WHERE O HAVING

1) Inmediatamente despues de un operador de comparacion

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

END-EXEC

25

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

END-EXEC

2) Despues de un operador de comparacion seguido de:

.

ALL, para indicar que el valor proporcionado debe ser compara

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

Ej: WHERE EXPRESION > ALL SUBQUERY

para satisfacer la WHERE, el valor de la expresion de ser mayor que todos los valores devueltos por la SUBQ Si la SUBQUERY no selecciona ningun valor la condicio satisfecha.

.

ANY, para indicar que el valor proporcionado debe ser compara

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

Ej: WHERE EXPRESION > ANY SUBQUERY

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

entre los valores devueltos por la SUBQUERY.

Ejemplo:

EXEC SQL DECLARE XYZ CURSOR FOR

Manual Básico DB2.txt SELECT EMPNO, LASTNAME, JOBCODE FROM DSN.EMP1 WHERE EMPNO IN (SELECT DISTINCT EMPNO FROM DSN.EMP2 WHERE PROYNO = 'M1')

END-EXEC

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

END-EXEC

26

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

una fila que cumpla la condicion de la SUBQUERY.

Ejemplo:

WHERE EXISTS SUBQUERY

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

SUBQUERY CORRELATIVA

En una SUBQUERY normal, el DB2 ejecuta la SUBQUERY una vez, sustit el resultado en la parte derecha de la condicion de busqueda, y ev la SELECT de nivel superior segun el valor de la condicion de busq

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

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

Es igual que una normal excepto porque despues de especificar el n de la tabla en la clausula FROM, proporcionamos un nombre de corre cion, variable que representa la fila actual. Para especificar la lacion se prefija el nombre de columna con un nombre de correlacio

OTROS EJEMPLOS

Con UPDATE o SELECT, la SUBQUERY y la instruccion de nivel super deben referirse a diferente tabla.

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

.

Con una SELECT

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

 

27

EXEC SQL DECLARE XYZ CURSOR FOR SELECT EMPNO, LASTNAME, WORKDEPT, JOBCODE FROM DSN.EMP ESTAFILA WHERE JOBCODE > (SELECT AVG (JOBCODE) FROM DSN.EMP WHERE WORKDEPT = ESTAFILA.WORKDE

END-EXEC

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

END-EXEC

.

Con una UPDATE

EXEC SQL

Manual Básico DB2.txt 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)

SPUFI

END-EXEC

SPUFI (SQL PROCESSOR USING FILE INPUT) permite:

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

- Creacion de una tabla

- Creacion de una vista

CREATE TABLE TEMPL (EMPNO CHAR(6)

NOT NULL,

WORKDEPT CHAR(3) NOT NULL, JOBCODE DECIMAL(3) ) IN TESTTAB.DSN77EMP;

28

La instruccion CREATE VIEW se usa para establecer la definicion vista. La vista se crea cada vez que es referenciada por una ins ccion SQL.

CREATE VIEW EMPDATA AS SELECT * FROM DSN.EMP WHERE WORKDEPT = 'C1'

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

CREATE SYNONIM MITABLA FOR DSN.TABEMPL

y dar de baja ese sinonimo.

DROP SYNONIM MITABLA

PANELES

1) Panel Principal

.

Especificar un fichero de entrada,

que contiene las instrucc SQL que se quieren ejecutar, cuya longitud de registro sera

.

Especificar un fichero de salida

,

que recoge cada instrucci

el resultado de la ejecucion, que seran los datos recuperado una SELECT, o un SQLCODE en otras. Tambien incluye estadisti

 

29

.

Especificar las opciones de proceso

Manual Básico DB2.txt (YES por defecto)

- CHANGE DEFAULTS: Poniendo YES se accede al panel de opcio por defecto.

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

- EXECUTE: Ejecutar o no las instrucciones del fichero de e

- AUTOCOMMIT: Dar o no un punto de COMMIT.

- BROWSE OUTPUT: Displayar o no el fichero de salida.

2) Panel de opciones por defecto.

.

Especificar otras opciones de proceso

- ISOLATION LEVEL: Por defecto RR.

RR (REPEATABLE READ), garantiza que los valores de la de datos leidos o cambiados por SPUFI no pueden se biados por otro programa hasta que SPUFI alcance u to de COMMIT.

CS (CURSOR STABILITY), garantiza que ningun programa p modificar los datos de una fila en la cual SPUFI t posicionado un cursor. Esto proporciona maxima con rrencia.

- MAX SELECT LINES: Por defecto 250. Maximo numero de filas que devolvera una SELECT.

.

Definir caracteristicas del fichero de salida

- RECORD LENGTH: Por defecto 4092. No puede ser menor que la del fichero de entrada.

- BLOCK SIZE: Por defecto 4096.

- RECORD FORMAT: Por defecto VB.

- DEVICE TYPE: Por defecto SYSDA.

30

.

Especificar defectos para el formato de salida

- MAX NUMERIC FIELD: Por defecto 20. Anchura maxima para campos numericos.

- MAX CHAR FIELD: Por defecto 80. Anchura maxima para campos de caracteres.

- COLUMN HEADING: Por defecto NAMES. NAMES LABELS ANY BOTH

3) PANEL COMMIT/ROLLBACK

Si en el panel principal se especifica NO para AUTOCOMMIT, una que se completa la ejecucion se displaya este panel, en el que indicara una de estas opciones:

.

COMMIT: Salvar los cambios en la base de datos.

.

ROLLBACK : Borrar los cambios en la base de datos.

.

DEFER

RESTRICCIONES

Se pueden usar todas las instrucciones excepto:

CLOSE

EXECUTE

OPEN

DECLARE

FETCH

PREPARE

DESCRIBE

INCLUDE

WHENEVER

Manual Básico DB2.txt

Las opciones no soportadas por spufi son:

.

INTO

en la SELECT

.

WHERE CURRENT en la UPDATE y DELETE

31

CODIFICACION DE INSTRUCCIONES SQL EN UN PROGRAMA COBOL

1) Definir un area de comunicacion llamada SQLCA

Es un area de datos en la cual el DB2 devuelve informacion acer del resultado de la ejecucion de cada instruccion SQL.

WORKING-STORAGE SECTION

EXEC SQL INCLUDE SQLCA END-EXEC

Con esta instruccion el precompilador incluira:

01 SQLCA.

05

SQLCAID

PIC X(8).

05

SQLCABC

PIC S9(9) COMP.

05

SQLCODE

PIC S9(9) COMP.

05

SQLERRM.

49

SQLERRML

PIC S9(4) COMP.

49

SQLERRMC

PIC X(70).

05

SQLERRP

PIC X(8).

05

SQLERRD OCCURS 6 TIMES PIC S9(9) COMP.

05

SQLWARN.

 

10

SQLWARN0

PIC X(1).

10

SQLWARN1

PIC X(1).

10

SQLWARN2

PIC X(1).

10

SQLWARN3

PIC X(1).

10

SQLWARN4

PIC X(1).

10

SQLWARN5

PIC X(1).

10

SQLWARN6

PIC X(1).

10

SQLWARN7

PIC X(1).

05

SQLEXT

PIC X(8).

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

Esto puede hacerse de dos formas:

.

Codificando una instruccion DECLARE en la data division, espe

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

EXEC SQL DECLARE DSN.TDEPT TABLE

(DEPNUM CHAR(3)

END-EXEC

NOT NULL,

DEPNOM VARCHAR(36) NOT NULL)

.

32

Previamente a la precompilacion con el DCLGEN.

Para incluir en el programa las declaraciones producidas por

EXEC SQL INCLUDE nombre_del_miembro END-EXEC

3) Codificar instrucciones SQL

Cada instruccion comienza con EXEC SQL y termina con END-EXEC. En lugar de instrucciones COPY se codificara INCLUDE.

No se pueden usar nombres de variables que comiencen por SQL, n nombres de entradas externas o de plan que comiencen por DSN, y que estan reservados para el DB2.

No se pueden usar constantes figurativas como ZERO o SPACE en i cciones SQL.

VARIABLES Y ESTRUCTURAS HOST

Manual Básico DB2.txt

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

Una estructura HOST es un conjunto de variables HOST definidas DATA DIVISION del programa. Puede tener un maximo de dos nivele cepto la declaracion de una cadena de caracteres de longitud va que requiere un numero de nivel 49. Para identificar un campo d de una estructura en una instruccion SQL se codificara el nombr estructura seguido de un punto y el nombre del campo.

La parte entera de un numero nunca es truncada, si un numero no en una variable o en una columna, se trunca la parte decimal si ne y si no da un error.

La declaracion de variables HOST se hace en niveles 01 o 77 (la nivel 77 no pueden ser usadas en instrucciones SQL).

Una cadena de caracteres de longitud variable debe tener un niv 01 a 48, y contener dos campos elementales a nivel 49:

.

Campo de longitud PIC S9(4) COMP.

 

.

Campo de valor

PIC X(80).

(Como maximo).

VARIABLES INDICADOR

33

Una variable indicador es un entero de media palabra.

La variable indicador se especifica precedida de dos puntos inm tamente despues de la variable HOST.

Ejemplo:

EXEC SQL SELECT TELFNUM INTO :TELEF:INDNULL FROM DSN.TABEMPL WHERE EMPNO = :EMPID

END-EXEC

Se usa para:

.

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

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

.

Verificar que una cadena de caracteres recuperada no ha sido tr

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

.

Colocar un valor nulo en una columna

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

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

SQLCAID

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

SQLCABC

34

Entero de una palabra que especifica la longitud de la SQLCA. S lor es siempre 136 (X'88').

SQLCODE

Manual Básico DB2.txt

Es un entero de una palabra. Puede tener los siguientes valores ZERO la instruccion se ha ejecutado correctamente

-n ha ocurrido un error

+n la instruccion se ha ejecutado correctamente pero ha ocurri- do una condicion excepcional

+100 no existen datos para procesar

SQLERRM

Cadena de caracteres de longitud variable (maximo 70) que descr una condicion de error.

SQLERRD

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

SQLWARN0

Si es blanco, el resto de las variables SQLWARN tambien lo es. otra forma sera W, y al menos otra SQLWARN sera tambien W.

SQLWARN1

35

Si es W al menos el valor de una columna ha sido truncado al al narlo en una variable HOST.

SQLWARN2

Si es W al menos un valor nulo ha sido eliminado de el conjunto argumentos de una funcion.

SQLWARN3

Si es W el numero de variables HOST especificado en una instruc SQL es distINTO del numero de columnas en la tabla o vista.

SQLWARN4

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

5) MANEJO DE CONDICIONES EXCEPCIONALES: INSTRUCCION WHENEVER

Hace que el DB2 chequee la SQLCA y continue procesando el progr o bifurque a otra area del programa si encuentra un error. Pued tablecerse mas de una WHENEVER para una misma condicion a lo la del programa, de forma que una WHENEVER afecta a todas las inst cciones SQL siguientes hasta que se encuentre otra. Ejemplo:

EXEC SQL WHENEVER CONDICION ACCION END-EXEC

Manual Básico DB2.txt

36

Se pueden especificar tres condiciones:

.

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

contiene un valor positivo distinto de 100.

.

SQLERROR indica que se quiere hacer cuando SQLCODE < 0

.

NOT FOUND indica que se quiere hacer cuando el DB2 no puede en

trar una fila que satisfaga la instruccion SQL o cuando no hay filas para hacer una fetch (SQLCODE=100)

Se pueden especificar dos acciones:

.

CONTINUE el programa continua su ejecucion.

.

GO TO

el programa bifurca a otra area del programa, cuyo nom

bre ira precedido de dos puntos.

SUGERENCIAS PARA LA CODIFICACION DE INSTRUCCIONES SQL

Para facilitar el uso de indices por el DB2

.

Usar BETWEEN

en lugar de

>= AND <=

.

Evitar conversiones numericas especificando los mismos tipos de

tos en las comparaciones, y usar datos de la misma longitud

.

Evitar el uso de predicados con LIKE que comiencen por '%' o '_

.

Evitar expresiones aritmeticas en un predicado

Para facilitar la seleccion de datos de dos o mas tablas

.

Proporcionar datos redundantes en las JOIN de tablas

.

Usar JOIN en lugar de SUBQUERYS correlativas o de SUBQUERYS con

NOTAS SOBRE DB2 / SQL.

- DECLARE CURSOR.

37

Esta sentencia SQL no actualiza el SQLCODE.

- SQLCODE = 100.

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

- SELECT SUM(COLUMNA) EN COBOL:

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

NOTA:

APENDICE I

En CSP el campo que recoge la suma queda a ceros y el SQLCODE devuelve ceros.

Manual Básico DB2.txt

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

38

*----------------------------------------------------------------*

*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

SELECT2-FVAORBCV.

IND-NULL

PIC S9(4) COMP

VALUE 0.

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

END-EXEC.

CVATIOPA = '5'

IF SQLCODE = NOENCONTRADO OR IND-NULL < 0

UNION

THEN

.

.

.

39

*------------------------------------------------------*

* 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

Manual Básico DB2.txt OR AND AND

D.CVACLANA <= :WS-CVACLA19 D.CVAENTIA = :W-ENTIDAD D.CVACLANA >= :WS-CVACLA40

D.CVACLANA <= :WS-CVACLA59) AND

D.CVASITIA IN('0', '1') GROUP BY D.CVACLICA UNION ALL SELECT P.CVACLICA, SUM(CVANTITP) FROM FVACAPRV P WHERE (P.CVAENTIA = :W-ENTIDAD

AND

P.CVACLANA >= :WS-CVACLA00

AND

P.CVACLANA <= :WS-CVACLA19

OR

P.CVAENTIA = :W-ENTIDAD

AND

P.CVACLANA >= :WS-CVACLA40

AND

P.CVACLANA <= :WS-CVACLA59) AND

P.CVASITIA IN('0', '1') GROUP BY P.CVACLICA ORDER BY 1 END-EXEC.

IF SQLCODE NOT = CORRECTO AND

SQLCODE NOT = NOENCONTRADO THEN MOVE 'DECLARE-CURSOR1' TO WS-PARRAFO

TO DET8-TABLA

MOVE 'FVACARTV' PERFORM FIN-DB2.

BETWEEN (not between)

40

igual que

WHERE CAMPO1 BETWEEN 13 AND 16 WHERE CAMPO1 >=13 AND CAMPO 1 <= 16

IN (not in)

igual que

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

LIKE (not like)

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

GROUP BY con

clausulas AVG, MAX, MIN, HAVING

(AVG)

EXEC SQL DECLARE XMP1 CURSOR FOR SELECT DEPARTAMENTO, SEXO, AVG(SALARIO) FROM TABLA1 GROUP BY DEPARTAMENTO, SEXO END-EXEC.

EXEC SQL FETCH XMP1 INTO :CAMPO1, :CAMPO2, CAMPO3 END-EXEC.

41

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

(MAX)

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

END-EXEC.

Manual Básico DB2.txt

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

(MIN)

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

END-EXEC.

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

(HAVING)

EXEC SQL DECLARE XMP1 CURSOR FOR SELECT DEPARTAMENTO, AVG(SALARIO), MIN(EDLI) FROM TABLA1 WHERE SEXO = 'V' GROUP BY DEPARTAMENTO HAVING MIN(EDLI) >= 16 END-EXEC.

EXEC SQL FETCH XMP1 INTO :CAMPO1, :CAMPO2, CAMPO3 END-EXEC.

(Nos da la media del salario y el valor minimo del campo EDLI por departamento cuando el campo sexo sea = 'V' y el minimo de EDLI sea mayor o igual que 16).

42

RECOMENDACIONES PARA EL DISEÑO DE APLICACIONES EN DB2

WLM.-IBM

Son

varias

las

funciones

involucradas

implementacion de una aplicacion en DB2, debiendo tener

cuenta

funcion.

el

que

una misma persona puede realizar mas de

e

Las principales funciones que sera necesario desa

son:

ADMINISTRACION DE DATOS

Las tareas a desarrollar consisten en, sobre la base tener una vision corporativa de los datos, desarrol modelos logicos y mantener diccionario de datos, ademas de

* Establecer convenciones para la denominacion de

entidades de datos, atributos importantes.

las relaciones entre

datos

y

*

Definir reglas de integridad de datos.

 

*

Desarrollar vistas de usuario.

 

*

Soporte al

Administrador

de

base

de

datos

y

a

analistas de aplicaciones.

 

*

Participar en las sesiones de diseño de base de datos.

ADMINISTRACION DE BASE DE DATOS

 

Es responsabilidad de esta funcion el diseño y creacio

de

objetos DB2,

tales

como

tablas, vistas e indic

incluyendo ademas:

* Diseño de modelos fisicos de datos.

Manual Básico DB2.txt

* Desarrollo de nombres estandard para objetos DB2 , ta como espacios de tablas, tablas, indices y vistas.

* Definicion y creacion de objetos DB2.

* Asistir a los analistas de aplicaciones en los prototip funcionales.

43

* Desarrollar modelos de JCl para utilitis.

* Recomendaciones de procedimiento de backup/recovery p las tablas de aplicacion.

* Soporte a los programadores de aplicaciones en la prueba las aplicaciones DB2.

* Participar en las revisiones de diseño de aplicaciones.

* Dar soporte tecnico a miembros del equipo de desarrollo.

ADMINISTRACION DEL SISTEMA DB2

esta

subsistema DB2.

inicio, y entonces es compartida por el Administrador de

Base de Datos y el Programador del Sistema. responsabilidades que incluye son:

* Definir el entorno de operacion (hw. y sw.).

* Definir las opciones iniciales de instalacion.

* Suministrar la guia de funcionamiento al programador sistema y al operador.

* Suministrar informacion a la funcion de planificacion capacidad.

* Establecer directrices de backup y recuperacion.

* Controlar y perfeccionar el funcionamiento del subsist

Es responsabilidad

de

funcion el

controlar e

Normalmente esta funcion no existe

DB2.

* Participar en las revisiones de diseño.

* Realizar diagnostico de errores,tanto del sistema como aplicaiones.

* Establecer directrices para el uso de las funciones seguridad del subsistema DB2 y coordinar su uso con funcion de seguridad de la organizacion de administracio

PROGRAMADOR DEL SISTEMA DB2

Esta funcion es similar a la tradicional de programado del sistema, en lo que se refiere al entorno DB2 incluye:

44

* Instalacion de los productos prerrequisito.

* Instalacion de DB2 y otros productos relacionados.

* Implementar

procedimientos para la determinacion d

problemas.

* Aplicar mantenimiento de sw.

* Ejecutar las herramientas de medicion de rendimiento control, suministrando la informacion a las funciones ADMINISTRACION DEL SUBSISTEMA DB2 Y DE PLANIFICACION CAPACIDAD.

* Implementar procedimiento de backup y recovery.

* Suministrar autorizacion inicial.

* Desarrollar procedimientos de operacion y entrenamiento operadores.

OPERACION DEL SYSTEMA DB2

Manual Básico DB2.txt

Esta responsabilidad incluye:

* Arrancar, parar y controlar el subsistema DB2.

* Controlar los pertientes.

* Comunicacion con los demas operadores del sistema ( CIC TP).

las accio

mensajes del

DB2

y

tomar

ANALISIS DE APLICACIONES

Esta funcion tiene la responsabilidad de determinar documentar los requerimientos de la aplicacion, incluyendo definicion de las relaciones entre los datos y los modelos uso. En concreto, esta responsabilidad incluye:

* Definicion de los requerimientos de la aplicacion.

* Definicion de las relaciones entre datos y modelos usado

* Desarrollo del diseño logico de la aplicacion.

* Definir las especificaciones de los programas.

45

* Coordinar las revisiones del diseño.

* Coordinar las pruebas integradas de programas.

PROGRAMACION DE APLICACIONES

Esta funcion es responsable del desarrollo de programa e incluye:

* Codificar y probar programas.

* Implementar las reglas de integridad de datos.

* Codificar rutinas comunes, tales como rutinas de sali codigos de retorno del SQL,puntos de control logicos,etc

* Creacion y carga de datos de prueba en tablas.

* Participar en las revisiones del diseño y planificacion pruebas.

* Desarrollar procedimientos de backup y recuperacion para aplicacion.

SOPORTE DE CENTRO DE INFORMACION

El requerimiento

de

esta funcion surgira si se van

utilizar herramientas orientadas a usuarios finales, ta

como

funcion son:

* Añadir nuevos usuarios y mantener sus profiles.

* Soporte de consultas a usuarios finales.

* Asistir a los usuarios en la localizacion y acceso de datos que requieren.

* Controlar el uso de disco por los usuarios finales.

* Desarrollo de consultas comunes y complejas.

Las responsabilidades que incluye e

QMF

o

AS.

46

REPRESENTANTES DE LOS USUARIOS

Manual Básico DB2.txt

Las responsabilidades iniciales de los usuarios son:

* Asesoramiento en la identificacion y definicion de l entidades de la empresa y de sus procesos.

* Definicion de las reglas de integridad.

* Definicion de los objetivos de seguridad, disponibilidad rendimiento.

* Pudiendo tambien involucrarse en la fase de desarrollo la aplicacion,para facilitar la creacion de prototipos cons4 -- e informes.

En una fase inicial, las funciones de ADMINISTRACION D DATOS Y ADMINISTRACION DE BASES DE DATOS, pueden ser asumi por una sola persona.

el caso anterior, las funcioones d

PROGRAMACION DEL SISTEMA DB2 y ADMINISTRACION DEL SIST

DB2, pueden ser tambien asumidas por una sola persona.

Igualmente que en

MACRO ACTIVIDADES A DESARROLLAR EN UN PROYECTO

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

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

DISEÑO Y

DESARROLLO

APLICACION

¦Preparacion del entorno. ¦Desarrollar rutinas y proc. comunes. ¦Analisis de la aplicacion. ¦Diseño de Bases de Datos. ¦Desarrollo de programas y prueba. ¦Paso de desarrollo a produccion.

de la aplicacion. ¦Diseño de Bases de Datos. ¦Desarrollo de programas y prueba. ¦Paso de desarrollo
de la aplicacion. ¦Diseño de Bases de Datos. ¦Desarrollo de programas y prueba. ¦Paso de desarrollo

47

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

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

¦

De la lista de actividades expuesta, como se observ existen algunas que solo es necesario realizarlas una v otras que habra que realizarlas ciclicamente y finalme aquellas que son propias de cada aplicacion a desarrollar.

Del conjunto de funciones expuestas, sera necesari asignarlas a personas que formen parte del Proyecto y que menos seran:

* Una persona como Administrados de Base de Datos Administrador de Datos.

* Dos analistas de aplicaciones, uno actuando como lider proyecto.

* Dos o mas programadores de aplicaciones.

* Una persona, con el papel de

Programador del Sistema

Administrador de Datos del Sistema.

PLANIFICACION.

1.-Gestion del Proyecto.

Consistira en

el desarrollo de la planificacion

cada

Proyecto , definiendo la duracion de

tareas

que en algunos casos no sera del 100%.

una

de

las

y

la

dedicacion a ellas de los recursos del equi

Manual Básico DB2.txt I5 Planificacion de la formacion y entrenamiento diferentes miembros del equipo.

2.-Seleccion de la aplicacion piloto.

En

la

que

participaran el administrador de la bas

datos y analista de aplicaciones.

48

Debera ser una aplicacion de bajo riesgo, que tenga

amplio espectro de

aplicacion

de herramientas,

c

simulacion completa

y

no compleja

ademas

de

facil

demostrar a los usuarios finales.

3.-Definicion de Estandares.

Participaran

en

administrador

de

base

de

datos

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

Su actividad consistira en :

a) Denominacion de los objetos DB2, programas, cop transacciones, usuarios, jobs.

b) Directrices

para

el

diseño de

tablas

y

de

aplicacion.

c) Directrices para la programacion de la aplicacion

d) Directrices de documentacion.

e) Procedimientos especificos de instalacion.

4.-Identificar los recursos a proteger.

Definir un

entorno de acceso limitado de datos

autorizaciones y responder a los requerimientos de auditor

a

personal que tenga la responsabilidad de mantener el ento

de seguridad. Ademas participarna el administrador de ba de datos y analista de aplicaciones.

Ser responsable el administrador del sistema, y

Las tareas a realizar son:

* Definir los objetivos de seguridad.

* Identificar los recursos a proteger.

* Establecer los grupos de autorizacion.

DISEÑO Y DESARROLLO DE LA APLICACION

1.-Establecer el entorno de desarrollo de la aplicac

Consistira

programador de aplicaciones, en cuya actividad participara

en

preparar

el

entorno de

trabajo

49

administrador del datos.

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

el administrador de bases

sistema y

2.-Analisis de aplicaciones.

Consistira

en

la

eleccion

y aplicacion

de

metodologia por parte de los analistas de aplicaciones,

para las tareas de:

* Definicion de requerimientos.

* Diseño externo.

* Modelo logico de datos.

* Diseño interno.

Actividades importantes, integradas en las señala

son:

Manual Básico DB2.txt

- 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 con la colaboracion del analista de aplicaciones.

da

4.-Desarrollo y prueba de programas.

Consistira basicamente en la codificacion y prueb los programas de la aplicacion, el responsable directo s el programador de aplicaciones y tambien participara analista de aplicaciones el el administrador de base datos.

Las tareas a realizar son:

* Crear datos de prueba.

* probar las llamadas SQL.

* Desarrollar los programas.

* Prueba unitaria.

* prueba integrada.

50

5.-Paso de Desarrollo a Produccion.

El responsable ser

el lider del projecto y partici

todo

importantes son:

* Desarrollar el plan de migracion.

* Revisar el rendimiento de la aplicacion.

* Obtener el espacio en disco de produccion.

* Informar al personal de produccion de la carga esperada.

* Desarrollar una lista de puntos claves para el manejo problemas.

* Mover definiciones de bases de datos (DDL).

* Crear librerias y mover programas de aplicacion.

* Realizar la integracion de las tareas en CICS, TSO.

* Cargar nuevos datos.

* Nuevos usuarios.

* Establecer autorizaciones.

* Ejecutar RUNSTATS.

* Preprocesar, compilar, link y bind de programas.

* Pasar el EXPLAIN a todos los planes y verificar que se u los caminos esperados.

* Establecer procedimientos de contabilidad.

el

equipo

en esta actividad,

cyuas

tareas

El

DB2

suministra

rutinas

de servicio llam

"attachement facilities" que conectan el programa aplicacion al DB2 para permitir usar sus servicios.

comando DSN y sus interfases asociadas, DSNELI (para TSO

Batch

de conexion al DB2.

), DSNCLI ( para CICS ) , son las facilidades stand

Por tanto cualquier

programa

de

aplicacion

totalmente dependiente de la conexion al DB2. Por ejemp

no

se

pueden

cambiar

los nombres

de

planes, antes

finalizar la

aplicacion.

Si

el

DB2

termina, tamb

terminar la aplicacion.

DISEÑO DE BASES DE DATOS

INTRODUCCION.-

51

Manual Básico DB2.txt

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

una primera fase de diseño en la que se definiese "Arquitectura de datos" o "Modelo de datos corporativo", represente de forma general a la entidad, sin entrar

detalles, simplemente a nivel de

Relaciones entre estos U

cliente, un prestamo, etc.), lo cual supondra el inicio

diseño del Sistema de Informacion de la entidad.

iniciara

proceso de analisis de cada una de las aplicacione

subsistemas definidos en el Sistema de Informacion, y

consiguiente al

Datos

U Grupos

de

( un

empleado, un

departament

Una vez cubierta

la

fase

anterior, se

los

datos"

"analisis de

propios de

aplicacion, definiendo entonces el contenido de pantall informes y otros ficheros que requiera el usuario.

DISEÑO LOGICO DE BASES DE DATOS

A)ANALISIS DE DATOS.

1)Establecer normas de denominacion de los datos p evitar sinonimos(elementos con diferente nombre y mi significado) y homonimos (elementos con el mismo nombr diferente significado).

elaboracion del

modelo de

datos,

nue

2)Durante la U entidades U

se

crearan

siempre que

dos entid

U relacionen U en una forma varios a varios.

Un ejemplo podra ser que un cliente ha prestado vari avales y que un aval ha sido hecho por varios clientes. cual nos llevara a aconsejar la creacion de una ta extra de Avales/clientes.

En esta fase se definiran tambien los atributos de relaciones y de las entidades. En consecuencia diferentes items de datos que integran una entida mediante que claves y tipos de las mismas establecere las relaciones entre las diferentes entidades.

52

3)En la teoria relacional, clave primaria o candidata implica camino de acceso o secuencia.

4)Foreign keys son frecuentemente buenas candidatas para rendimiento de indices. (se puede usar en joins).

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

5)Un "Clustering index" es aquel que determina el orden fisico de las filas de una tabla.

B)NORMALIZACION

Una vez realizado el analisis

normalizar las entidades (tablas) en tercera forma norma

datos, se procedera

de

1)Primera forma normal. Consiste en la eliminacion de

campos repetitivos

mediante

la

creacion

de

una

nu

entidad.

La

cual

incluye una Foreign

Key en la nu

entidad, para entidades.

asi

poder realizar JOIN

con

las

La importancia de

fundamentalmente por la eliminacion de campos repetidos

dara

implicados.

esta

normalizacion,

viene

d

lugar a un no deseado

mantenimiento de los cam

2)Segunda forma normal. Consiste en determinar que da elementales son dependientes de campos de clave

estos camp

incluyendo tambien una foreign key en la nueva entid

primaria. Una nueva entidad se creara con

para asi poder hacer join con las dos.

3)Tercera forma normal. Consiste en determinar que da Página 34

Manual Básico DB2.txt elementales son dependientes de solamente una parte de clave primaria. Una nueva entidad se creara con es campos, incluyendo una foreign key en la nueva entid para asi poder hacer join con las dos entidades.

La importancia de la normalizacion en segunda y terc forma normal, consiste en evitar anomalias de actualizac ( en especial en lo que se refiere a la integridad datos, tal como borrado desintencionado de registros ). una tabla contiene campos no dependientes de la cl primaria completa, entonces podran darse anomalias en actualizacion.

53

C)INTEGRIDAD REFERENCIAL

La integridad referencial puede ser definida como:

* Siempre que se necesita cambiar una tabla (insert actualizar, borrar), que condiciones deben existir en otras tablas?.

* Siempre que se modifica una tablas, que otras tab deben ser cambiadas?.

Estos aspectos afectan al desarrollo, a la planificacion la recuperacion, etc.

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

INTEGRIDAD DE DATOS:

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

* ANALISIS TOTAL DE LOS DATOS.

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

* NORMALIZACION DE LOS DATOS, PARA EVITAR:

Restricciones artificiales en la aplicacion.

Almacenamiento redundante de datos. Foreign Keys).

Cualquier posible anomalia en la actualizacion.

(excepto

54

p

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

* Implementar

las

reglas de integridad refere

definidas al diseñar las bases de datos.

* Definir e implementar trabajo.(LUW)

en cada una de ellas poder establecer los p

de Commit en los interactivos.

Esto es un aspecto importante en cuanto a integrida rendimiento.

-Una orientacion en programas interactivos puede ser:

Diseñar la aplicacion de tal modo que una LUW corresponda con cada pantalla que se visualiza. Página 35

logica

las

unidades

de

Para

programas batch o

Sync

en

Manual Básico DB2.txt

Siempre

que

haya

un

CICS

RETURN supone

un

S

implicito.

Evitar cancelaciones, de tal forma que cualquier cod de retorno imprevisto, suponga un rollback y mensajes usuario, ademas de escribir la SQLCA en un fichero errores.

con el uso de un thread, c

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

Una LUW se corresponde

-Una orientacion en programas batch puede ser:

En programas de significada actividad de actualizac ser necesario usar Commit y prever restauracion logi

Las Commit deberan hacerse cada cierto numero de LUW,

base a cuantos bloqueos puede tener el IRLM (

aplicable a bloqueos de paginas o tambien cada 10 o minutos.

No olvidar que todo programa batch que realice Com periodicos debe tener restauracion logica o debe po volver a ser ejecutado sin afectar a la integridad los datos.

esto

55

RENDIMIENTO Y CONCURRENCIA EN BASE DE DATOS

ALGUNOS DE LOS FACTORES CLAVES SON :

A)CONCURRENCIA.

* Esperas por liberacion de bloqueos pueden esconder causa de un lento rendimiento.

* Pueden producirse

fallos del

SQL

debido a

que

sobrepasa el

debido a un lock timeout o a un deadlock.

numero de bloqueos concurrentes del I

B)TRABAJO REALIZADO POR EL DB2 PARA EL SQL.

* El factor clave consiste en el numero de paginas que leidas y/o escritas por el DB2,lo cual es funcion del de acceso y la cardinalidad de las columnas.

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

-Informacion sobre el plan de acceso esta disponible DB2 EXPLAIN. Se puede usar para una sentencia SQL o p una Plan completo. Esta informacion incluye:

Secuencia en la que los conjuntos (query-blocks) sentencias son procesadas. (ejemplos de sentencias que tiene varios query-blocks son subselects, UNIONs JOINs).

Secuencia de acciones dentro de un query-block.

(se suministra el nomb

Si

Como se esta usando un indice (MATCHCOLS=0 indic busqueda por indice con mucho tiempo de ejecucion).

se esta usando un indice.

56

Si

hay bloqueo

a

nivel de pagina o espacio de tabl

(TSLOCKMODE).

Cuando es igual