SSSSSSSSS
SSS
SSSSSSS
SSSSSSS
SSS
SSSSSSSSS
QQQQQQQ
QQ QQ
QQ QQ
QQ QQ
QQ QQQ
QQQQQQ QQ
LL
LL
LL
LL
LLLLLLLL
LLLLLLLLL
//
//
//
//
//
//
DDDDDDD
DDDDDDDD
DD DD
DD DD
DD DD
DDDDDDDD
BBBBBBB
BBBBBBBB
BB BB
BBBBBBBB
BB
BB
BBBBBBBB
222222222
222
2222222
2222222
222
222222222
I
INDICE
________
CEPTOS.
Conceptos
................................................ 1
Tablas
................................................... 1
Tipos de datos
que puede contener una columna de una tabla
2
Indices
.................................................. 2
ANISMOS DE
SEGURIDAD DE LOS DATOS.
Vistas
................................................... 2
Racf (Resource Access Control Facility)
.................. 3
Passwords de ficheros Vsam .............................. 3
Autorizacion
.............................................
3
ANISMOS DE
INTEGRIDAD DE LOS DATOS.
Concurrencia
.............................................
3
Recuperacion de
datos ....................................
3
- Unidad de
recuperacion ...............................
3
Ayudas a la
programacion .................................
4
- Spufi
................................................ 4
- Paneles
para preparacion de programas ................
4
- Paneles
para mantenimiento de planes .................
4
- DCLGEN
(Declarations Generator) ......................
4
- Online Help
..........................................
5
RUCTURA DE UN
PROGRAMA QUE OPERA EN UN ENTORNO CICS.
Estructura de
un programa que opera en un entorno cics ...
5
Preparacion del
programa para la ejecucion ...............
5
- Traslacion
...........................................
5
-
Precompilacion ....................................... 6
- Compilacion
y link-edicion ...........................
6
- Binding
..............................................
6
TRUCCIONES S.Q.L.
Instrucciones basicas
.................................... 7
Clausula Where
...........................................
8
Select into
..............................................
8
Update ................................................... 9
Delete
................................................... 9
Insert
................................................... 10
Insercion a la
vez de varias filas de una tabla en otra .. 10
Funciones del cursor
..................................... 11
Declare cursor
........................................... 11
Open
..................................................... 12
Fetch
.................................................... 12
II
Whenever not found
....................................... 13
Update ...................................................
13
Delete
................................................... 14
Close
.................................................... 14
Opciones de la
instruccion select ........................ 15
- Operaciones
aritmeticas .............................. 15
- Funciones
Built-in ................................... 16
- Avg
.................................................. 16
- Max
.................................................. 16
- Min
.................................................. 16
- Sum
.................................................. 16
- Count
................................................ 16
- Clausulas Group by, Having y Order
by ................ 17
- Group by
............................................. 17
- Having
............................................... 18
- Order by
............................................. 18
- Union ................................................
19
Seleccion de
datos de varias tablas en una fila (join) ... 20
Opciones de las
condiciones de busqueda .................. 21
- Between ...
And ...................................... 21
- In
................................................... 21
- Like
................................................. 21
- Is null
.............................................. 22
TAS.
Concepto
................................................. 22
Proceso de una
vista ..................................... 23
Subquery
................................................. 24
Formas de
incluir una subquery en una clausula where o
having ...................................................
24
-
Inmediatamente despues de un operador de comparacion.. 24
- Despues de
un operador de comparacion seguido de all
o any
.................................................. 25
- Despues de In, para indicar que el valor de
la expre-
sion debe
estar entre los valores devueltos por la sub-
query
.................................................. 25
- Despues de
Exists, verificacion de que puede ser en-
contrada una
fila con la condicion de la subquery ...... 26
Subquery
correlativa ..................................... 26
Otros ejemplos
........................................... 26
- Con una SELECT
....................................... 26
- Con una UPDATE
....................................... 27
- Con una DELETE
....................................... 27
FI.
Crear y probar instrucciones SQL
......................... 27
Creacion de una
tabla .................................... 28
Creacion de una
vista .................................... 28
Creacion de una
tabla .................................... 28
Crear un nombre
alternativo o sinonimo para una tabla o
vista y dar de
baja ese sinonimo ......................... 28
III
ELES.
Panel Principal
.......................................... 28
- Especificar
un fichero de entrada .................... 28
- Especificar
un fichero de salida ..................... 28
- Especificar
las opciones de proceso .................. 29
Panel de
opciones por defecto ............................ 29
- Especificar
otras opciones de proceso ................ 29
- Definir
caracteristicas del fichero de salida ........ 29
- Especificar
defectos para el formato de salida ....... 30
Panel
Commit/Rollback .................................... 30
Restricciones
............................................ 30
IFICACION DE
INSTRUCCIONES SQL EN UN PROGRAMA COBOL.
Definir un area
de comunicacion llamada SQLCA ............ 31
Describir cada
tabla o vista a la que acceda el programa . 31
Codificar
instrucciones SQL .............................. 32
- Variables y
estructuras host ......................... 32
- Variables
indicador .................................. 33
Manejo de
codigos de retorno de errores : LA SQLCA ....... 33
Manejo de
condiciones excepcionales: Instruccion Whenever. 35
- Tres
condiciones que se pueden especificar ........... 36
- Dos
acciones que se pueden especificar ............... 36
Sugerencias
para la codificacion de instrucciones SQL .... 36
- Facilitar
el uso de indices por el DB2 ............... 36
- Facilitar
la seleccion de datos de dos o mas tablas .. 36
Notas sobre DB2
/ SQL .................................... 37
NDICE I.
Ejemplos de
instrucciones sql en cobol II ................ 37
- Distinct
............................................. 37
- Count
................................................ 38
- Sum
.................................................. 38
- Union
................................................ 39
- Between
(not between) ................................ 40
- In (not in)
.......................................... 40
- Like (not
like) ...................................... 40
- Group by
............................................. 40
- Max
.................................................. 41
- Min
.................................................. 41
- Having
............................................... 41
OMENDACIONES
PARA EL DISEÑO DE APLICACIONES EN DB2.
Administracion
de datos .................................. 42
Administracion
de base de datos .......................... 42
Administracion
del sistema DB2 ........................... 43
Programador del
sistema DB2 .............................. 43
Operacion del
sistema DB2 ................................ 44
Analisis de
aplicaciones ................................. 44
Programacion de
aplicaciones ............................. 45
IV
Soporte de
centro de informacion ......................... 45
Representantes
de los usuarios ........................... 46
Macro
actividades a desarrollar en un proyecto ........... 46
-
Planificacion ........................................ 46
- Hw/sw
instal. ........................................ 46
- Diseño y
desarrollo aplicacion ....................... 46
- Operacion y
recuperacion ............................. 47
- Gestion
Rdto. ........................................ 47
NIFICACION.
Gestion del
proyecto ..................................... 47
Seleccion de la
aplicacion piloto ........................ 47
Definicion de
estandares ................................. 48
Identificar los
recursos a proteger ...................... 48
EÑO Y DESARROLLO
DE LA APLICACION.
Establecer el
entorno de desarrollo de la aplicacion ..... 48
Analisis de
aplicaciones ................................. 49
Diseño de Base de Datos
.................................. 49
Desarrollo y
prueba de programas ......................... 49
Paso de
desarrollo a produccion .......................... 50
EÑO DE BASES DE
DATOS.
Introduccion .............................................
51
EÑO LOGICO DE
BASES DE DATOS.
Analisis de
datos ........................................ 51
Normalizacion
............................................ 52
Integridad
referencial ................................... 53
EGRIDAD DE
DATOS.
Un adecuado
diseño de base de datos ...................... 53
- Analisis
total de los datos .......................... 53
-
Normalizacion de los datos ........................... 53
Un adecuado
diseño de modulos, codificacion y pruebas .... 54
DIMIENTO Y
CONCURRENCIA EN BASE DE DATOS.
Concurrencia
............................................. 55
Trabajo
realizado por el DB2 para el SQL ................. 55
Diseño fisico
de bases de datos .......................... 56
Seleccion de
indices ..................................... 60
1
CONCEPTOS
_________
El DB2 es un
sistema de manejo de bases de datos basado en un mode
relacional de
datos. Rueda bajo sistema operativo MVS/SP como un s
sistema de este:
+-------------+
¦
TERMINAL ¦
¦
CICS/OS/VS ¦
+-------------+
¦
+---------¦--------------------------------------------------
¦ v
¦ +------------+ MVS/SD
¦ ¦
CICS/OS/VS ¦-------------+
Sistema Operativo
¦
+------------+ ¦
¦ ¦ ¦
¦ v v
¦ +------------+ +-------+ +-----------+
¦ ¦ IMS/VS
¦ ¦ DB2
¦<------- ¦ TSO
y ¦
¦ ¦ DB
¦ +-------+ ¦
BATCH ¦
¦
+------------+ ¦ +-----------+
+---------¦------------------¦-------------------------------
¦ ¦
v v
+----------+ +-----------+
+----------+ ¦ +----------+ ¦
¦ Bases de
¦ ¦
¦ Bases de ¦ ¦
¦
Datos ¦--+ ¦ Datos
¦----+
¦
IMS/VS ¦ ¦
DB2 ¦
¦
DL/I ¦ ¦
¦
+----------+ +----------+
TABLAS
______
Los datos en las
bases de datos DB2 estan disponibles para un prog
de aplicacion
como un conjunto de tablas. Las tablas son estructur
datos de dos
dimensiones, compuestas de FILAS y COLUMNAS.
Un nombre de
tabla esta formado por un identificador de la persona
creo la tabla, y
de un nombre descriptivo de esta, separados por p
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
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
2.
Explicitamente en puntos de la transaccion: EXEC CICS SYNCPOI
3.
Implicitamente
: EXEC DLI TERM
4.
Implicitamente en un programa BATCH-DLI
: EXEC DLI CHKP
Si ocurre una
accion y otra no, se dice que la base de datos ha pe
su integridad o
consistencia. Para lograr que los datos recuperen
valor que tenian
antes de comenzar la unidad de recuperacion, se u
opcion ROLLBACK
para el comando SYNCPOINT.
AYUDAS A LA
PROGRAMACION
________________________
Spufi:
_____ Permite usar el SQL sin tener que codificar
un programa com
mediante
instrucciones que pueden ser ejecutadas y mostrada
el
terminal.
Paneles para
preparacion de programas:
_____________________________________
Permiten la precompilacion,
pilacion,
link-edicion y binding de un programa. Solo se ne
ta
especificar el nombre del fichero que contiene las instr
nes
fuente.
Paneles para
mantenimiento de planes:
____________________________________
Con las opciones BIND, REBIN
FREE. Permiten crear, cambiar o
borrar el plan de cualquier
grama
DB2.
DCLGEN
(Declarations Generator):
_______________________________
Usa la informacion del catalogo D
para:
.
Crear definiciones de las estructuras de tablas o vist
que
van a ser guardadas en librerias de Copys para su
5
terior inclusion en los programas.
.
Producir instrucciones SQL DECLARE TABLE
ONLINE HELP:
___________ Proporciona ayuda durante la ejecucion del
spufi.
ESTRUCTURA DE UN
PROGRAMA QUE OPERA EN UN ENTORNO CICS
______________________________________________________
+-----------------------------------------------+
¦
APLICACION
¦
¦
¦
¦ 1 - Area de datos
<-----------+ ¦
¦ 2 - SQLCA ¦ ¦
¦ ¦ ¦
¦ +-->
3 - Entrada al programa
¦ ¦
¦ ¦
4 - Tratar mensaje de entrada ¦
¦
¦ ¦
5 - Proceso
¦ ¦
¦ ¦
6 - Instrucciones SQL ---+
¦ ¦
¦ ¦
7 - Mensaje de salida ¦ ¦
¦
¦ ¦ +--
8 - Terminacion ¦ ¦
¦
¦ ¦
¦
¦ ¦ ¦
+---¦--¦----------------------------¦----¦------+
¦ ¦ ¦ ¦
¦ ¦
v ¦
+--------¦--------------+
+-----------+ -----> +-----
¦ ENTRY ¦
CICS/OS/VS ¦ ¦
CICS/OS/VS¦ ¦ DB2
¦ v ¦ +-----------+ <-----
+-----
¦ EXIT ¦
+-----------------------+
1- DB2 pone los
valores de las columnas recuperadas en las variab
del
programa.
2- Cada
programa que accede a datos DB2 debe tener un area de dat
llamada
SQLCA (SQL Comunication Area), usada por el DB2 para d
al programa
si la ejecucion de la ultima instruccion SQL ha si
correcta,
mediante un codigo de retorno , que se puede examina
los campos
SQLCODE y SQLWARN0 (deben ser cero y blanco).
PREPARACION DEL
PROGRAMA PARA LA EJECUCION
__________________________________________
a. Traslacion
de las instrucciones EXEC por el CICS/OS/VS.
__________
6
b.
Precompilacion del programa.
______________
El
precompilador busca errores de sintaxis, y prepara cada in
ccion SQL
para compilacion o ensamblaje, dando como resultado
conjunto de
instrucciones fuente (modulo fuente).
Ademas, el
DB2 crea un DBRM (Data Base Request Module), que s
usado en el
paso d, y contiene informacion acerca de cada ins
ccion SQL precompilada.
c. Compilacion
( o ensamblaje) y link-edicion.
___________
____________
Cada modulo
fuente es compilado o ensamblado para dar lugar a
modulo de
carga. Al link-editar, los modulos de carga se enla
en un unico
modulo objeto.
d. Relacionar
el programa y los datos DB2 (binding).
_______
Se relaciona
el programa (el DBRM que representa las peticion
SQL hechas
por el programa) y las tablas y vistas DB2 que se
ren
procesar. Esto da lugar a un plan de aplicacion, el cual
almacenado
por el DB2 y usado cuando se ejecute el programa.
El proceso
de binding incluye los siguientes pasos:
.
Examinar la validez de los nombres de columnas, tabl
vistas utilizados en el programa
.
Verificar que la persona esta autorizada a realizar
operaciones de acceso especificadas por las instrucc
SQL del programa
.
Seleccionar los caminos de acceso a los datos DB2 qu
programa quiere procesar
Cuando se va a hacer bind de una aplicacion
se puede especifi
- Isolation
level:
. RR
el lock afecta a todas las filas que toca el prog
. CS
el lock afecta a todas las filas a las que el pro
esta accediendo actualmente
Se puede
hacer lock del espacio de tabla entero que contiene
bla que se
quiere proteger mediante una instruccion lock tabl
.
Para permitir a otras aplicaciones recuperar, pero n
tualizar, borrar o insertar filas se usa
EXEC SQL
LOCK TABLE
nombre_de_tabla
IN SHARE
MODE
END-EXEC
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
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.
Si varias filas
cumplieran la condicion, se usara una instruccion
DECLARE CURSOR
para seleccionar las filas, seguida de una instrucc
FETCH para mover
los valores de las columnas a las variables una f
cada vez.
UPDATE
______
Funcion
_______
Cambiar el valor
de una o mas columnas en cada fila que satisface
condicion de
busqueda de la clausula WHERE. Tambien se puede usar
borrar un valor
de una fila , cambiando el valor de la columna a N
Formato
_______
EXEC SQL
UPDATE
nombre_de_la_tabla o vista
SET columnas que se quieren actualizar = nuevo
valor
WHERE condicion_de_busqueda
END-EXEC
El nuevo valor
especificado para una columna puede ser el nombre d
otra columna de
la misma fila, una constante, una variable, una ex
sion aritmetica,
un valor nulo, etc.
Si se omite la
clausula WHERE, el DB2 actualiza cada fila de la ta
o vista con los
valores dados.
DELETE
______
Funcion
_______
Quitar filas
enteras de una tabla, no columnas especificas.
10
Formato
_______
EXEC SQL
DELETE
FROM nombre_de_la_tabla o vista
WHERE condicion_de_busqueda
END-EXEC
Si se omite la
clausula WHERE, se borraran todas las filas de la t
bla o vista. Para
borrar la definicion de una tabla, ademas de su
contenido, se
usa la instruccion DROP.
INSERT
______
Funcion
_______
Añadir nuevas
filas a una tabla o vista, se puede:
. Especificar
los valores de las columnas que se quieren insert
. Incluir una
instruccion SELECT en la INSERT para decir al DB2
los datos
para la nueva fila estan contenidas en otra tabla o
Formato
_______
EXEC SQL
INSERT
INTO
nombre_de_la_tabla o vista (nombres de
columnas)
VALUES
(valor_de_cada_columna especificada en la clausula INT
END-EXEC
Si se
especifican menos nombres de columnas de los que hay en la f
el DB2 les asigna valores por defecto.
Si se intenta
insertar una fila que duplica otra existente en la t
. Si la tabla
tiene un indice unico, la fila no es insertada, y
DB2
proporciona un SQLCODE -803
. Si la tabla
no tiene un indice unico, la fila es insertada sin
INSERCION A LA
VEZ DE VARIAS FILAS DE UNA TABLA EN OTRA TABLA
_____________________________________________________________
Ejemplo:
Se crea una
tabla llamada EMPTIME con las columnas EMPNUMBER,
PROYNUMBER,
STARTDATE y ENDDATE, y se usa la INSERT para llenarla.
11
EXEC SQL
INSERT INTO
USERA.EMPTIME
(EMPNUMBER, PROYNUMBER, STARTDATE, ENDDATE)
SELECT EMPNO, PROYNO, COMIENZO, FIN
FROM DSN.EMP
END-EXEC
En una SELECT
embebida en una INSERT no se puede poner UNION ni OR
El numero de
columnas de la SELECT debe ser el mismo de la INSERT.
datos que se
seleccionan deben ser compatibles con las columnas en
que se van a
insertar. Para las columnas que no se especifiquen se
sertaran los
valores por defecto establecidos cuando se creo la ta
Cuando se
inserta una fila en una vista, si esta no contiene todas
columnas de la
tabla base, el DB2 inserta en ellas valores por def
FUNCIONES DEL
CURSOR
____________________
El cursor
permite a un programa recuperar un conjunto de filas, y
procesar una
fila cada vez.
El DB2 construye
una 'tabla de resultados' para guardar todas las
recuperadas al
ejecutar una instruccion SELECT, y utiliza el curso
hacerlas disponibles al programa. Un cursor
identifica la fila act
de la tabla de
resultados, que el programa puede recuperar secuenc
mente hasta que
alcanza el fin de los datos ( SQLCODE=100, NOT FOU
Un programa
puede utilizar varios cursores, para cada uno de ellos
utilizan las
siguientes instrucciones:
DECLARE CURSOR
______________
Funcion
_______
Se usa para
definir e identificar un conjunto de filas que van a s
accedidas con un
cursor.
Formato
_______
EXEC SQL
DECLARE nombre_del_cursor
CURSOR FOR
SELECT columna 1, columna 2 .....
FROM nombre_de_la_tabla
WHERE columna 1 = condicion_de_busqueda
FOR UPDATE
OF columna 2 ...(columnas de cada fila
que se
quieren actualizar)
END-EXEC
12
La instruccion
DECLARE CURSOR nombra un cursor. La instruccion SEL
define un
conjunto de filas, que formaran la tabla de resultados.
Es posible
actualizar una columna de la tabla identificada aunque
sea parte de la tabla de resultados (que no
haya sido nombrada en
instruccion
SELECT), nombrandola en la clausula FOR UPDATE OF.
Cuando DB2
evalua una instruccion SELECT, puede ocurrir que varias
satisfagan la
condicion de busqueda, y que algunas de ellas esten
dadas. Para
especificar que no se desean, se codificara:
SELECT
DISTINCT columna 1, columna 2, .....
OPEN
____
Funcion
_______
Le dice al DB2
que se esta preparado para procesar la primera fila
la tabla de
resultados.
Formato
_______
EXEC SQL
OPEN nombre_del_cursor
END-EXEC
FETCH
_____
Funcion
_______
Mover a las
variables del programa el contenido de la fila selecci
Formato
_______
EXEC SQL
FETCH nombre_del_cursor
INTO variable 1, variable 2 ....
END-EXEC
Cuando se
utiliza la instruccion FETCH, el DB2 usa el cursor para
tar a la
siquiente fila de la tabla de resultados.
13
WHENEVER NOT
FOUND
__________________
Funcion
_______
Para detectar
que ya no tenemos mas filas para procesar se puede:
. Examinar si
el SQLCODE tiene valor 100, esto ocurre cuando una
truccion
FETCH ha recuperado la ultima fila de la tabla de res
dos y se da
otra FETCH. Ejemplo: IF SQLCODE = 100 GO TO NO-DAT
. Codificar la
instruccion WHENEVER NOT FOUND bifurcando a otra
del
programa.
Formato
_______
EXEC SQL
WHENEVER
NOT FOUND GO TO direccion_simbolica
END-EXEC
UPDATE
______
Funcion
_______
Una vez que se
ha recuperado la fila actual, se puede actualizar e
con UPDATE.
Formato
_______
EXEC SQL
UPDATE nombre_de_la_tabla
SET columna 1 = valor , columna 2 =
valor ....
WHERE
CURRENT OF nombre_del_cursor
END-EXEC
Cada columna que
se quiere actualizar debe haber sido nombrada pre
mente en la
clausula FOR UPDATE OF de la instruccion DECLARE CURSO
La clausula
WHERE identifica el cursor que apunta a la fila que va
ser actualizada.
Despues de actualizar una fila, la posicion del c
permanece en esa
fila hasta que se utilice una instruccion FETCH p
la siguiente
fila.
Con la
instruccion UPDATE se actualizan varias filas con una sola
truccion SQL,
mientras que UPDATE ... WHERE CURRENT OF, permite ob
una copia de la
fila, examinarla, y entonces, actualizarla.
14
DELETE
______
Funcion
_______
Una vez que se
ha recuperado la fila actual, se puede borrar con D
Formato
_______
EXEC SQL
DELETE
FROM nombre_de_la_tabla
WHERE
CURRENT OF nombre_del_cursor
END-EXEC
La clausula
WHERE identifica el cursor que apunta a la fila que va
borrada. Despues
de borrar una fila, no se puede actualizar o borr
utilizando ese
cursor, hasta que se de una FETCH para la siguiente
Con la
instruccion DELETE se borran varias filas con una sola inst
ccion SQL,
mientras que DELETE ... WHERE CURRENT OF, permite obten
una copia de la
fila, examinarla, y entonces, borrarla.
CLOSE
_____
Funcion
_______
Cerrar el cursor
una vez que se ha terminado de procesar las filas
la tabla de
resultados si se quiere volver a utilizarlo. El DB2 ci
el cursor
automaticamente cuando termina el programa.
Formato
_______
EXEC SQL
CLOSE nombre_del_cursor
END-EXEC
Si el programa
completa una unidad de recuperacion todos los curso
abiertos son
cerrados automaticamente por el DB2. Si el cursor se
ve a abrir, el
proceso comenzara al principio de la tabla de resul
y se tendra que
restablecer la posicion del cursor.
Ejemplo:
Supongamos que
se quieren actualizar los datos de los empleados de
tabla DSN.EMPL
dando un SYNCPOINT cada 100 filas.
15
1. Declarar
el cursor como conjunto de filas de EMPNO > UPD-EMP
EXEC
SQL
(valor actual
DECLARE EMPLEADO CURSOR FOR
del limite
SELECT EMPNO, SALARY
mas bajo)
FROM DSN.EMPL
WHERE EMPNO > :UPD-EMP
ORDER BY EMPNO
END-EXEC
2. Abrir el
cursor y mover los datos de la tabla de resultados
fila cada
vez, de forma que el limite mas bajo de la tabla s
tualiza en
UPD-EMP.
EXEC
SQL : EXEC SQL
OPEN EMPLEADO : FETCH
EMPLEADO
END-EXEC : INTO
:UPD-EMP, :UPD-SAL
: END-EXEC
3. Borrar una
fila
EXEC SQL
DELETE FROM DSN.EMPL
WHERE EMNO = :UPD-EMP
END-EXEC
4. Al abrir
el cursor de nuevo, la condicion de busqueda de la
procesara
la DSN.EMPL basandose en el valor actual de UPD-EM
OPCIONES DE LA
INSTRUCCION SELECT
_________________________________
OPERACIONES
ARITMETICAS
_______________________
La instruccion
SELECT se puede usar para realizar operaciones arit
cas con los
datos antes de que sean proporcionados al programa. Es
consigue
mediante operadores aritmeticos en la lista de columnas.
SELECT JOBCODE + 10 . . .
Los operadores
aritmeticos se pueden usar con columnas de datos de
dos como
INTEGER, SMALLINT, DECIMAL, o FLOAT, con constantes numer
y variables.
El valor de la
expresion aritmetica se asigna a una variable, pero
reemplaza al
valor de la columna de la tabla o vista.
16
FUNCIONES
BUILT-IN
__________________
Permiten obtener
informacion acerca de las filas que satisfacen la
dicion de
busqueda. Se puede incluir mas de una en cada instruccio
LECT. La funcion
BUILT-IN se aplica a cada fila que satisface la c
cion de
busqueda, ignorando los valores nulos.
AVG
___
Promedio de los
valores de una o mas columnas que contengan datos
ricos.
MAX
___
Maximo valor de
una o mas columnas.
MIN
___
Minimo valor de
una o mas columnas.
SUM
___
Suma del valor
de una o mas columnas.
COUNT
_____
. Numero de
filas que satisfacen la condicion de busqueda:
EXEC SQL
SELECT
COUNT(*)
INTO EMP-COUNT
FROM
DSN-EMP
WHERE
JOBCODE >= 50
END-EXEC
17
. Numero de
valores unicos de una columna en particular:
EXEC SQL
SELECT
COUNT (DISTINCT DEPTNO)
INTO
DST-COUNT
FROM
DSN-EMP
END-EXEC
CLAUSULAS GROUP
BY, HAVING Y ORDER BY
_____________________________________
No se pueden
especificar en una instruccion SELECT dentro de la DE
CURSOR, cuando
se pretenda actualizar una columna o borrar una fil
GROUP BY
________
Divide las filas
que satisfacen la condicion de busqueda en grupos
gun una o mas
columnas especificadas en esta clausula. El resultad
la aplicacion de
una funcion BUILT-IN, no sera ya un valor unico,
tantos valores
como grupos. Si hay valores nulos en una columna es
ficada en GROUP
BY, el DB2 los considera en un grupo por separado.
Ejemplo:
Calculo del
salario medio por departamento el resultado sera una
por departamento
al no especificar WHERE, se procesan todas las fi
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT
WORKDEPT, AVG(SALARY)
FROM DSN-EMP
GROUP BY
WORKDEPT
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO
:WORK-DEPT, :AVG-SALARY
END-EXEC
Es posible
agrupar por mas de una columna.
Ejemplo:
Calculo del
salario medio por departamento y por sexo. El resultad
seran dos filas
por departamento (una por cada sexo), para las cua
se calculara el
promedio.
18
EXEC SQL
DECLARE XYZ
CURSOR FOR
SELECT
WORKDEPT, SEX, AVG(SALARY)
FROM DSN-EMP
GROUP BY
WORKDEPT, SEX
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :WORK-DEPT,
:SEX, :AVG-SALARY
END-EXEC
HAVING
______
Se usa seguida
de la clausula GROUP BY, para especificar que solo
desean los
grupos que satisfagan una condicion.
Se codifica como
la clausula WHERE, pudiendo contener predicados m
ples, la
clausula DISTINCT, HAVING NOT, y funciones BUILT-IN.
Ejemplo:
Calculo del
salario medio de las mujeres por departamento, pero so
para los
departamentos en los que todos los empleados poseen un ni
de educacion
igual o superior a 16.
EXEC SQL
DECLARE XYZ
CURSOR FOR
SELECT
WORKDEPT, AVG(SALARY), MIN(EDUCL
FROM DSN-EMP
WHERE SEX =
'F'
GROUP BY
WORKDEPT
HAVING
MIN(EDUCLVL) >= 16
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO
:WORK-DEPT, :AVG-SALARY, :MIN-EDUC
END-EXEC
ORDER BY
________
Indica el orden
en el que se quieren recuperar las filas, el cual
especifica
mediante el nombre de la columna o columnas, o un numer
(ORDER BY 3
especifica que se quiere ordenar por la tercera column
de la tabla de
resultados) cuando en la SELECT no se ha especifica
un nombre de
columna sino una expresion aritmetida, funcion BUILT-
etc.
19
Todas las
columnas de la claurula ORDER BY se han de haber especif
en la SELECT.
Por defecto se
toma orden ascendente. Si se encuentran valores nul
son tratados
como los mas altos. Los caracteres graficos se ordena
en secuencia
EBCDIC.
Se pueden
especificar secuencias de orden secundarias.
Ejemplo:
Recuperar el
nombre y numero de departamento de las mujeres emplea
ordenado por
numero de departamento descendente, y dentro de c
departamento por
nombre de empleado.
EXEC SQL
DECLARE XYZ
CURSOR FOR
SELECT
EMPNAME, WORKDEPT
FROM DSN-EMP
WHERE SEX =
'F'
ORDER BY WORKDEPT DESC,
EMPNAME
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :PGM-NAME, :WORK-DEPT
END-EXEC
UNION
_____
Permite combinar
dos o mas instrucciones SELECT para formar una un
tabla de
resultados, eliminando las filas duplicadas. Se usa para
clar valores de
varias tablas, pero el conjunto de filas seleccion
de una tabla es
añadido al conjunto de filas seleccionado de otra.
Los tipos de
datos y longitudes de las columnas nombradas en la in
ccion SELECT
deben ser identicos. Por ejemplo, SELECT A, B UNION X
la columna A
debe ser identica a la X, y la columna B a la Y.
Para especificar
las columnas por las que se quiere ordenar se deb
usar numeros, y
nunca nombres de columnas.
Para identificar
de que instruccion SELECT procede cada fila, se i
ye una constante
al final de la lista de cada SELECT.
SELECT A, B, 'A1' UNION X, Y, 'B1'
El DB2 devolvera
la constante correspondiente a cada instruccion S
en la ultima
columna de la fila.
20
Ejemplo:
EXEC SQL
DECLARE XYZ
CURSOR FOR
SELECT EMPNO
FROM DSN.EMP1
WHERE WORKDEPT
= :WORK-DEPT
UNION
SELECT
DISTINCT EMPNO
FROM DSN-EMP2
WHERE PROJNO =
:NUM-PROY
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO
:EMP-NUMBER
END-EXEC
SELECCION DE
DATOS DE VARIAS TABLAS EN UNA FILA (JOIN)
______________________________________________________
Es posible formar
una fila de la tabla de resultados para la cual
parte de las
columnas procedieran de una tabla, y otra parte de ot
Si coinciden los
nombres de columna de dos tablas, habra que calif
los, poniendo
como prefijo el nombre de la tabla.
En la instruccion SELECT se listan los
nombres de las columnas que
quieren. Si en
su lugar se coloca un *, el DB2 devuelve una fila f
da por todas las
columnas de la primera fila, unido a todas las de
segunda.
Si no se especifica
la clausula WHERE cada fila de la primera tabl
concatenada a
cada fila de la segunda tabla para formar una tabla
resultados, cuyo
numero de filas sera el producto del numero de fi
de cada tabla.
Ejemplo:
A=3 B=2 AB=6
Este metodo se
puede usar para crear una vista, pero esta no puede
procesada
mediante instrucciones UPDATE, DELETE o INSERT.
Es posible unir
una tabla o vista consigo misma, y hasta 7 tablas.
Ei se usa la
clausula GROUP BY en la definicion de una vista, la v
no puede ser
unida con otra tabla.
Ejemplo:
Queremos
recuperar las columnas EMPNO y LASTNAME de la tabla DSN.E
y las columnas
ACTNUM y EMPTIME de la DSN.EMP2.
21
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMP1.EMPNO, LASTNAME, ACTNUM, EMPTI
FROM DSN.EMP1, DSN-EMP2
WHERE EMP1.EMPNO = EMP2.EMPNO
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :ACTIV, :TIME
END-EXEC
OPCIONES DE LAS
CONDICIONES DE BUSQUEDA
_______________________________________
Todas ellas se
pueden codificar con NOT.
BETWEEN ... AND
_______________
Especifica que
la condicion debe ser satisfecha por cualquier valo
este comprendido
entre los dos valores especificados.
WHERE EDUCLVL BETWEEN 13 AND 16
IN
__
Indica que se
esta interesado en las filas para las que el valor d
columna
especificada esta entre los valores que se listan.
WHERE WORKDEPT IN ('A00', 'C01', 'E02')
LIKE
____
Indica que se
esta interesado en las filas para las que el valor d
columna
especificada es similar al que se proporciona. El grado de
recido es
determinado por dos caracteres especiales usados en la c
que se incluye
en la condicion de busqueda:
22
. Un '_' para
cualquier caracter simple
. Un '%' para
una cadena de caracteres. A no ser que el % prece
la cadena
de caracteres, la cadena buscada puede comenzar en
quier parte
de la columna
Se usan cuando
no se conocen todos los caracteres de una columna o
importa su
contenido.
Ejemplo:
. Para encontrar
todos los empleados que viven en San Jose, debemo
tar seguros de
que San Jose no es parte del nombre de otra ciuda
porque el DB2
nos devolveria tambien esa fila.
WHERE TOWN LIKE '%SAN JOSE%'
. Para encontrar
todos los empleados que viven en ciudades que com
den por SAN.
WHERE TOWN LIKE 'SAN%'
IS NULL
_______
Indica que se
esta interesado en las filas para las que el valor d
columna
especificada es nulo.
WHERE CODIGO IS NULL
Para indicar que
se esta interesado en las filas para las que el v
de la columna
especificada es blancos.
WHERE CODIGO = ' '
VISTAS
______
CONCEPTO
________
Una vista no
contiene datos. Es una definicion almacenada de un co
to de filas y
columnas. Cuando un programa accede a los datos defi
por una vista,
el DB2 procesa la definicion de la vista. El result
es un conjunto
de filas a las que el programa puede acceder median
instrucciones
SQL.
23
Una vista es
como una ventana a traves de la cual un programa pued
acceder solo a
los datos que necesita. Las vistas se pueden usar i
cambiablemente
con las tablas cuando se recuperan datos, y pueden
varse de una o
mas tablas. Puede tener nombres de columnas diferen
de los nombres
de las tablas.
Las funciones de
una vista son:
- Seguridad: No
permitir el acceso de algunos usuarios a todos lo
datos de una tabla.
- Hacer
disponible a una aplicacion un subconjunto de una tabla,
lo cual es
mas facil codificar instrucciones SQL ya que solo se
las columnas
y filas de una tabla que se necesitan.
Una vista
basada en una tabla de empleados puede contener filas
para un
determinado departamento.
- Resumir datos
de una tabla y hacerlos disponibles:
. La
suma de valores de una columna
. El
maximo valor de una columna
. El
promedio de valores de una columna
. El
resultado de una expresion aritmetica con una o m
columnas
Cuando se
actualizan los datos de una vista, se actualizan los dat
de la tabla de
la que se deriva, y, al contrario, si los datos de
tabla cambian,
los datos accesibles a traves de vistas basadas en
tabla tambien
cambian.
PROCESO DE UNA
VISTA
____________________
Una vista se
puede crear via SPUFI.
Para insertar
una fila en una tabla por medio de una vista, la fil
debe tener un
valor para cada columna de la tabla que no posee un
valor por
defecto.
Si se crea una
vista usando funciones BUILT-IN o las clausulas DIS
o GROUP BY,
solamente es posible usar la instruccion SELECT para e
Si una columna
de una vista es definida por medio de una expresion
metica, no se
podra actualizar la columna o insertar filas en la v
Si se crea una
vista especificando 'WITH CHECK OPTION', todas las
ciones y
actualizaciones contra la vista son chequeadas antes para
probar que la
fila esta conforme con la definicion de la vista.
Si la vista es
resultado de un JOIN, los datos de esta pueden ser
seleccionados,
pero no se puede insertar, borrar o actualizar.
24
No se puede
crear un indice para una vista.
Si la
instruccion SELECT usada para crear una vista contiene un *
lugar de una
lista de columnas, y mas tarde alguien añade otra col
a la tabla en la
cual se basa la vista, la nueva columna no aparec
en la vista a
menos que la vista sea creada de nuevo.
SUBQUERY
________
En una SELECT
anidada en otra SELECT la primera
se llama SELECT
OUTER-LEVEL, y
la interna SUBQUERY.
Cuando se usa
una SUBQUERY el DB2 la evalua, y sustituye el valor
resulta de ella
en la clausula WHERE o HAVING de nivel superior, y
puede existir
una SUBQUERY dentro de otra, hasta cinco, e incluso,
de haber varias
condiciones de busqueda conectadas por operadores
cionales, cada
una con SUBQUERYS.
La instruccion
SELECT de una SUBQUERY solo puede especificar 1 col
1 funcion
BUILT-IN o 1 expresion aritmetica.
Una SUBQUERY no
puede contener una clausula ORDER BY.
Cuando la
instruccion de nivel superior es otra SELECT:
. La SUBQUERY
puede basarse en la misma tabla o vista o en otra
. Se puede
usar una SUBQUERY en una instruccion WHERE incluso s
SELECT es
parte de una DECLARE CURSOR, INSERT o CREATE VIEW.
Cuando la
instruccion de nivel superior es UPDATE o DELETE la SUBQ
no puede basarse
en la misma tabla o vista.
FORMAS DE
INCLUIR UNA SUBQUERY EN UNA CLAUSULA WHERE O HAVING
_____________________________________________________________
1)
Inmediatamente despues de un operador de comparacion
____________________________________________________
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNO, LASTNAME, JOBCODE
FROM DSN.EMP1
WHERE EDUCLEVEL >
(SELECT
AVG (EDUCLEVEL)
FROM
DSN.EMP2
END-EXEC
25
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :CODE
END-EXEC
2) Despues de un
operador de comparacion seguido de:
________________________________________________
. ALL, para
indicar que el valor proporcionado debe ser compara
una determinada
forma con todos los valores que devuelva la S
RY.
Ej: WHERE
EXPRESION > ALL SUBQUERY
para satisfacer la WHERE, el valor de la expresion de
ser
mayor que todos los valores devueltos por la SUBQ
Si
la SUBQUERY no selecciona ningun valor la condicio
satisfecha.
. ANY, para
indicar que el valor proporcionado debe ser compara
una determinada forma con cualquiera de
los valores que devue
la
SUBQUERY.
Ej: WHERE
EXPRESION > ANY SUBQUERY
3) Despues de
IN, para indicar que el valor de la expresion debe e
_______________________________________________________________
entre los
valores devueltos por la SUBQUERY.
___________________________________________
Ejemplo:
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNO, LASTNAME,
JOBCODE
FROM DSN.EMP1
WHERE EMPNO IN
(SELECT
DISTINCT EMPNO
FROM
DSN.EMP2
WHERE
PROYNO = 'M1')
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :CODE
END-EXEC
26
4) Despues de
EXISTS para verificar que al menos puede ser encontr
_______________________________________________________________
una fila que
cumpla la condicion de la SUBQUERY.
_______________________________________________
Ejemplo:
WHERE EXISTS SUBQUERY
No es
necesario especificar nombres de columna en la SELECT, sin
ya que la
SUBQUERY no va a devolver datos.
SUBQUERY
CORRELATIVA
____________________
En una SUBQUERY
normal, el DB2 ejecuta la SUBQUERY una vez, sustit
el resultado en
la parte derecha de la condicion de busqueda, y ev
la SELECT de
nivel superior segun el valor de la condicion de busq
Una SUBQUERY
correlativa se ejecuta una vez para cada fila de la t
o vista
mencionada en la SELECT de nivel superior, de forma que se
lua la SUBQUERY
para cada fila.
Se usa para
calcular algun valor que puede ser diferente para cada
Es igual que una
normal excepto porque despues de especificar el n
de la tabla en
la clausula FROM, proporcionamos un nombre de corre
cion, variable
que representa la fila actual. Para especificar la
lacion se
prefija el nombre de columna con un nombre de correlacio
OTROS EJEMPLOS
______________
Con UPDATE o
SELECT, la SUBQUERY y la instruccion de nivel super
deben
referirse a diferente tabla.
En una INSERT,
ni la SUBQUERY ni la SELECT de nivel superior den
de la INSERT,
pueden basarse en la misma tabla en la que se inse
. Con una SELECT
______________
Esta SELECT
recuperara las columnas especificadas para cada empl
cuyo JOBCODE
es superior a la media de su departamento.
27
EXEC SQL
DECLARE XYZ CURSOR FOR
SELECT EMPNO, LASTNAME, WORKDEPT, JOBCODE
FROM DSN.EMP ESTAFILA
WHERE JOBCODE >
(SELECT
AVG (JOBCODE)
FROM
DSN.EMP
WHERE
WORKDEPT = ESTAFILA.WORKDE
END-EXEC
.......................................
EXEC SQL
FETCH XYZ
INTO :EMP-NUMBER, :NAME, :DEPT, :CODE
END-EXEC
. Con una UPDATE
______________
EXEC SQL
UPDATE DSN.EMP1 ESTAFILA
SET DATE = 9999
WHERE 840901 >
(SELECT
MAX (ENDATE)
FROM DSN.EMP2
WHERE
PROJNO = ESTAFILA.PROJNO)
END-EXEC
. Con una DELETE
______________
EXEC SQL
DELETE FROM DSN.EMP1 ESTAFILA
WHERE NON EXISTS
(SELECT
*
FROM
DSN.EMP2
WHERE
PROJNO = ESTAFILA.PROJNO)
END-EXEC
SPUFI
_____
SPUFI (SQL
PROCESSOR USING FILE INPUT) permite:
- Crear y probar
instrucciones SQL antes de incluirlas en un progr
________________________________
28
- Creacion de
una tabla
_____________________
CREATE TABLE TEMPL
(EMPNO CHAR(6) NOT NULL,
WORKDEPT
CHAR(3) NOT NULL,
JOBCODE DECIMAL(3) )
IN TESTTAB.DSN77EMP;
- Creacion de
una vista
_____________________
La instruccion
CREATE VIEW se usa para establecer la definicion
vista. La
vista se crea cada vez que es referenciada por una ins
ccion SQL.
CREATE VIEW EMPDATA AS
SELECT *
FROM DSN.EMP
WHERE WORKDEPT = 'C1'
- Crear un
nombre alternativo o sinonimo para una tabla o vista
_____________________________________________________________
CREATE SYNONIM MITABLA FOR DSN.TABEMPL
y dar de baja
ese sinonimo.
___________________________
DROP SYNONIM MITABLA
PANELES
_______
1) Panel
Principal
_______________
.
Especificar un fichero de entrada,
_________________________________
que contiene las instrucc
SQL que se
quieren ejecutar, cuya longitud de registro sera
.
Especificar un fichero de salida
_________________________________,
que recoge cada instrucci
el
resultado de la ejecucion, que seran los datos recuperado
una
SELECT, o un SQLCODE en otras. Tambien incluye estadisti
29
.
Especificar las opciones de proceso
___________________________________ (YES por defecto)
- CHANGE
DEFAULTS: Poniendo YES se accede al panel de opcio
por defecto.
- EDIT
INPUT: Editar o no el fichero de entrada.
-
EXECUTE: Ejecutar o no las instrucciones del fichero de e
-
AUTOCOMMIT: Dar o no un punto de COMMIT.
- BROWSE
OUTPUT: Displayar o no el fichero de salida.
2) Panel de
opciones por defecto.
_____________________________
.
Especificar otras opciones de proceso
_____________________________________
-
ISOLATION LEVEL: Por defecto RR.
RR
(REPEATABLE READ), garantiza que los valores de la
de datos leidos o cambiados por SPUFI no pueden se
biados por otro programa hasta que SPUFI alcance u
to de COMMIT.
CS
(CURSOR STABILITY), garantiza que ningun programa p
modificar los datos de una fila en la cual SPUFI t
posicionado un cursor. Esto proporciona maxima con
rrencia.
- MAX
SELECT LINES: Por defecto 250.
Maximo numero de filas que devolvera una SELECT.
. Definir
caracteristicas del fichero de salida
_____________________________________________
- RECORD
LENGTH: Por defecto 4092.
No
puede ser menor que la del fichero de entrada.
- BLOCK
SIZE: Por defecto 4096.
- RECORD
FORMAT: Por defecto VB.
- DEVICE
TYPE: Por defecto SYSDA.
30
.
Especificar defectos para el formato de salida
______________________________________________
- MAX
NUMERIC FIELD: Por defecto 20.
Anchura
maxima para campos numericos.
- MAX
CHAR FIELD: Por defecto 80.
Anchura
maxima para campos de caracteres.
- COLUMN
HEADING: Por defecto NAMES.
NAMES
LABELS
ANY
BOTH
3) PANEL
COMMIT/ROLLBACK
_____________________
Si en el
panel principal se especifica NO para AUTOCOMMIT, una
que se
completa la ejecucion se displaya este panel, en el que
indicara una
de estas opciones:
. COMMIT:
Salvar los cambios en la base de datos.
. ROLLBACK :
Borrar los cambios en la base de datos.
. DEFER
RESTRICCIONES
_____________
Se pueden usar
todas las instrucciones excepto:
CLOSE EXECUTE OPEN
DECLARE FETCH PREPARE
DESCRIBE INCLUDE WHENEVER
Las opciones no
soportadas por spufi son:
. INTO en la SELECT
. WHERE CURRENT
en la UPDATE y DELETE
31
CODIFICACION DE
INSTRUCCIONES SQL EN UN PROGRAMA COBOL
______________________________________________________
1) Definir un
area de comunicacion llamada SQLCA
_____________________________________________
Es un area de
datos en la cual el DB2 devuelve informacion acer
del resultado
de la ejecucion de cada instruccion SQL.
WORKING-STORAGE SECTION
EXEC
SQL
INCLUDE SQLCA
END-EXEC
Con esta
instruccion el precompilador incluira:
01 SQLCA.
05
SQLCAID PIC X(8).
05
SQLCABC PIC S9(9) COMP.
05
SQLCODE PIC S9(9) COMP.
05 SQLERRM.
49
SQLERRML PIC S9(4) COMP.
49
SQLERRMC PIC X(70).
05
SQLERRP PIC X(8).
05 SQLERRD
OCCURS 6 TIMES PIC S9(9) COMP.
05 SQLWARN.
10
SQLWARN0 PIC X(1).
10
SQLWARN1 PIC X(1).
10
SQLWARN2 PIC X(1).
10 SQLWARN3 PIC X(1).
10
SQLWARN4 PIC X(1).
10
SQLWARN5 PIC X(1).
10
SQLWARN6 PIC X(1).
10
SQLWARN7 PIC X(1).
05
SQLEXT PIC X(8).
2) Describir
cada tabla o vista a la que acceda el programa
________________________________________________________
Esto puede
hacerse de dos formas:
. Codificando
una instruccion DECLARE en la data division, espe
cando nombre de la tabla y listando cada
columna y su tipo de
EXEC
SQL
DECLARE DSN.TDEPT TABLE
(DEPNUM CHAR(3) NOT NULL,
DEPNOM VARCHAR(36) NOT NULL)
END-EXEC
32
. Previamente
a la precompilacion con el DCLGEN.
Para
incluir en el programa las declaraciones producidas por
EXEC
SQL
INCLUDE nombre_del_miembro
END-EXEC
3) Codificar
instrucciones SQL
___________________________
Cada
instruccion comienza con EXEC SQL y termina con END-EXEC.
En lugar de
instrucciones COPY se codificara INCLUDE.
No se pueden
usar nombres de variables que comiencen por SQL, n
nombres de
entradas externas o de plan que comiencen por DSN, y
que estan
reservados para el DB2.
No se pueden
usar constantes figurativas como ZERO o SPACE en i
cciones SQL.
VARIABLES Y
ESTRUCTURAS HOST
____________________________
Las variables
HOST son campos de datos, definidos en el program
la WORKING
STORAGE o en la LINKAGE SECTION, y especificados en
opcion INTO
de una instruccion SELECT o FETCH, en los cuales se
los valores
de los datos recuperados por el DB2. Las variables
se codifican
en las instrucciones SQL precedidas por dos puntos
Una
estructura HOST es un conjunto de variables HOST definidas
DATA DIVISION
del programa. Puede tener un maximo de dos nivele
cepto la
declaracion de una cadena de caracteres de longitud va
que requiere un numero de nivel 49. Para
identificar un campo d
de una
estructura en una instruccion SQL se codificara el nombr
estructura
seguido de un punto y el nombre del campo.
La parte
entera de un numero nunca es truncada, si un numero no
en una
variable o en una columna, se trunca la parte decimal si
ne y si no da
un error.
La
declaracion de variables HOST se hace en niveles 01 o 77 (la
nivel 77 no
pueden ser usadas en instrucciones SQL).
Una cadena de
caracteres de longitud variable debe tener un niv
01 a 48, y
contener dos campos elementales a nivel 49:
. Campo de
longitud PIC S9(4) COMP.
. Campo de
valor PIC X(80). (Como maximo).
33
VARIABLES
INDICADOR
___________________
Una variable
indicador es un entero de media palabra.
La variable
indicador se especifica precedida de dos puntos inm
tamente
despues de la variable HOST.
Ejemplo:
EXEC SQL
SELECT TELFNUM
INTO :TELEF:INDNULL
FROM DSN.TABEMPL
WHERE EMPNO = :EMPID
END-EXEC
Se usa para:
. Indicar si ha
sido asignado un valor nulo a su variable asociad
_______________________________________________________________
Si el valor
de la columna que se esta recuperando es nulo el DB
ne un valor
negativo en la variable indicador ( si no se usara
daria un
error), y el valor de la variable HOST no se alterara.
. Verificar que
una cadena de caracteres recuperada no ha sido tr
_______________________________________________________________
Si la
variable indicador contiene un entero positivo, este espe
la longitud
original de la cadena.
. Colocar un
valor nulo en una columna
____________________________________
Cuando se
procesa una instruccion UPDATE el DB2 chequea la vari
indicador. Si esta contiene un valor
negativo, el valor de la c
na se pondra
como nulo. Si contiene un valor mayor que -1 la va
ble asociada
contiene un valor para la columna.
4) MANEJO DE
CODIGOS DE RETORNO DE ERRORES : LA SQLCA
__________________________________________________
SQLCAID
_______
Cadena de
caracteres (long 8) que identifica la SQLCA (valor 'S
34
SQLCABC
_______
Entero de una
palabra que especifica la longitud de la SQLCA. S
lor es
siempre 136 (X'88').
SQLCODE
_______
Es un entero
de una palabra. Puede tener los siguientes valores
ZERO la
instruccion se ha ejecutado correctamente
-n ha
ocurrido un error
+n la
instruccion se ha ejecutado correctamente pero ha ocurri-
do
una condicion excepcional
+100 no
existen datos para procesar
SQLERRM
_______
Cadena de
caracteres de longitud variable (maximo 70) que descr
una condicion
de error.
SQLERRD
_______
SQLERRD(3)
indica el numero de filas insertadas, actualizadas o
borradas en
una tabla.
SQLWARN0
________
Si es blanco,
el resto de las variables SQLWARN tambien lo es.
otra forma
sera W, y al menos otra SQLWARN sera tambien W.
35
SQLWARN1
________
Si es W al
menos el valor de una columna ha sido truncado al al
narlo en una variable HOST.
SQLWARN2
________
Si es W al
menos un valor nulo ha sido eliminado de el conjunto
argumentos de
una funcion.
SQLWARN3
________
Si es W el
numero de variables HOST especificado en una instruc
SQL es
distINTO del numero de columnas en la tabla o vista.
SQLWARN4
________
Si es W una
UPDATE o DELETE dinamica no incluye una clausula WH
5) MANEJO DE
CONDICIONES EXCEPCIONALES: INSTRUCCION WHENEVER
_________________________________________________________
Hace que el
DB2 chequee la SQLCA y continue procesando el progr
o bifurque a
otra area del programa si encuentra un error. Pued
tablecerse
mas de una WHENEVER para una misma condicion a lo la
del programa,
de forma que una WHENEVER afecta a todas las inst
cciones SQL
siguientes hasta que se encuentre otra.
Ejemplo:
EXEC SQL
WHENEVER CONDICION ACCION
END-EXEC
36
Se pueden
especificar tres condiciones:
______________________________________
. SQLWARNING
indica que se quiere hacer cuando SQLWARN0 = W o SQ
contiene un
valor positivo distinto de 100.
. SQLERROR
indica que se quiere hacer cuando SQLCODE < 0
. NOT FOUND
indica que se quiere hacer cuando el DB2 no puede en
trar una
fila que satisfaga la instruccion SQL o cuando no hay
filas para
hacer una fetch (SQLCODE=100)
Se pueden
especificar dos acciones:
__________________________________
. CONTINUE el
programa continua su ejecucion.
. GO TO el programa bifurca a otra area del
programa, cuyo nom
bre
ira precedido de dos puntos.
SUGERENCIAS
PARA LA CODIFICACION DE INSTRUCCIONES SQL
_____________________________________________________
Para
facilitar el uso de indices por el DB2
___________________________________________
. Usar
BETWEEN en lugar de >= AND <=
. Evitar conversiones numericas
especificando los mismos tipos de
tos en las
comparaciones, y usar datos de la misma longitud
. Evitar el uso
de predicados con LIKE que comiencen por '%' o '_
. Evitar
expresiones aritmeticas en un predicado
Para
facilitar la seleccion de datos de dos o mas tablas
________________________________________________________
. Proporcionar
datos redundantes en las JOIN de tablas
. Usar JOIN en
lugar de SUBQUERYS correlativas o de SUBQUERYS con
37
NOTAS SOBRE DB2
/ SQL.
_____________________
- DECLARE
CURSOR.
Esta sentencia
SQL no actualiza el SQLCODE.
- SQLCODE =
100.
Si se declara
un cursor para la SELECT y no hay filas que satis
las
condiciones de busqueda el DB2 nos devuelve un SQLCODE = 10
en la primera
FETCH que se haga.
- SELECT
SUM(COLUMNA) EN COBOL:
Si no se
efectuo la suma -no existen filas para las condiciones
busqueda- el
valor que se devuelve en el campo resultado de la
suma sera
nulos y en determinados casos se produce un SQL = -30
Conclusion:
Preveerlo en cobol utilizando indicador variable
que devolvera valor negativo si el campo al que est
asociado contien valores nulos.
NOTA: En CSP el campo que recoge la suma queda
a ceros
y
el SQLCODE devuelve ceros.
APENDICE I
__________
EJEMPLOS DE
INSTRUCIONES SQL EN COBOL II
________________________________________
DISTINCT
________
*----------------------------------------------------------------*
* LEER TABLA DE
ALTAS DE CLIENTE.
*
*----------------------------------------------------------------*
BUSCA-ALTAS.
MOVE TVACLTEA
TO CVANORAA-A
EXEC SQL
SELECT
DISTINCT CVANORAA, CVANCTAA
INTO
:CVANORAA-A, :CVANCTAA-A
FROM
FVAORALV
WHERE
CVANORAA = :CVANORAA-A
END-EXEC.
38
COUNT
_____
*----------------------------------------------------------------*
*CUENTA EL
NUMERO DE DOMICILIACIONES DE UNA ENTIDAD EMISORA *
*----------------------------------------------------------------*
CUENTA-DOMICILI.
EXEC SQL
SELECT
COUNT (*)
INTO
:CDOIMPOP-M
FROM FDOMAESV
WHERE CDOEMISA = :CDOEMISA-M
END-EXEC.
SUM
___
*----------------------------------------------------------------*
*SUMA EL
CONTENIDO DEL CAMPO CVANTITP *
*----------------------------------------------------------------*
77
IND-NULL PIC
S9(4) COMP VALUE 0.
SELECT2-FVAORBCV.
MOVE 0 TO IND-NULL CVANTITP-C
SQLCODE.
EXEC SQL
SELECT SUM(CVANTITP)
INTO :CVANTITP-C :IND-NULL
FROM FVAORBCV
WHERE CVAENTIA = :WS-ENTI-DEPOS-1234 AND
CVACLTEA = :CVACLTEA-C AND
CVAPIVAA = :CVAPIVAA-C AND
CVAOBSTA = '03' AND
CVATIOPA = '5'
END-EXEC.
IF SQLCODE = NOENCONTRADO OR
IND-NULL < 0
THEN . . .
39
UNION
_____
*------------------------------------------------------*
* SELECCIONAR DE
CARTERAS LA SUMA DE TITULOS QUE EL *
* CLIENTE POSEE
DE LA CLAVE VALOR AMPLIACION Y QUE *
* ESTEN EN
SITUACION '0' O '1'. *
* SE RECUPERARA
UN FILA POR CADA DISTINTO CLTE EN CADA*
* CARTERA. *
*------------------------------------------------------*
DECLARE-CURSOR1.
MOVE
CORRECTO TO SQLCODE.
EXEC SQL
DECLARE CURSOR1 CURSOR FOR
SELECT
D.CVACLICA, SUM(CVAUNUMP - CVAPNUMP + 1)
FROM
FVACARTV D
WHERE
(D.CVAENTIA = :W-ENTIDAD AND
D.CVACLANA >= :WS-CVACLA00
AND
D.CVACLANA <= :WS-CVACLA19 OR
D.CVAENTIA = :W-ENTIDAD AND
D.CVACLANA >= :WS-CVACLA40
AND
D.CVACLANA <= :WS-CVACLA59)
AND
D.CVASITIA IN('0', '1')
GROUP BY
D.CVACLICA
UNION
ALL
SELECT
P.CVACLICA, SUM(CVANTITP)
FROM
FVACAPRV P
WHERE
(P.CVAENTIA = :W-ENTIDAD AND
P.CVACLANA >= :WS-CVACLA00
AND
P.CVACLANA <=
:WS-CVACLA19 OR
P.CVAENTIA = :W-ENTIDAD AND
P.CVACLANA >= :WS-CVACLA40
AND
P.CVACLANA <= :WS-CVACLA59)
AND
P.CVASITIA IN('0', '1')
GROUP BY
P.CVACLICA
ORDER
BY 1
END-EXEC.
IF SQLCODE
NOT = CORRECTO AND
SQLCODE
NOT = NOENCONTRADO
THEN
MOVE
'DECLARE-CURSOR1' TO WS-PARRAFO
MOVE
'FVACARTV' TO DET8-TABLA
PERFORM FIN-DB2.
40
BETWEEN (not
between)
_______
WHERE
CAMPO1 BETWEEN 13 AND 16
igual que WHERE CAMPO1 >=13 AND CAMPO 1 <= 16
IN (not in)
__
WHERE
CAMPO1 IN ('A00', 'C01', 'E21')
igual que WHERE CAMPO1 = 'A00'
OR
CAMPO1 = 'C01'
OR
CAMPO1 = 'E21'
LIKE (not like)
____
WHERE
CAMPO1 LIKE 'TIO %' (que empienza por
"TIO ")
WHERE
CAMPO1 LIKE '%RAMIRO%' (que lleva
"RAMIRO" en
cualquier
posicion)
GROUP BY
con clausulas AVG, MAX, MIN, HAVING
________
(AVG)
EXEC
SQL
DECLARE XMP1 CURSOR FOR
SELECT DEPARTAMENTO, SEXO, AVG(SALARIO)
FROM TABLA1
GROUP BY DEPARTAMENTO, SEXO
END-EXEC.
EXEC
SQL
FETCH XMP1
INTO :CAMPO1, :CAMPO2, CAMPO3
END-EXEC.
41
(Nos da la media
de salario agupando por departamento y sexo.)
___________________________________________________________
(MAX)
EXEC
SQL
SELECT MAX(SALARIO)
INTO :CAMPO1
FROM TABLA1
WHERE DEPARTAMENTO = 'AX21'
END-EXEC.
(Nos da el mayor
valor del campo salario del departamento AX21.)
_____________________________________________________________
(MIN)
EXEC
SQL
SELECT MIN(SALARIO)
INTO :CAMPO1
FROM TABLA1
WHERE DEPARTAMENTO = 'AX21'
END-EXEC.
(Nos da el menor
valor del campo salario del departamento AX21.)
_____________________________________________________________
(HAVING)
EXEC
SQL
DECLARE XMP1 CURSOR FOR
SELECT DEPARTAMENTO, AVG(SALARIO), MIN(EDLI)
FROM TABLA1
WHERE SEXO = 'V'
GROUP BY DEPARTAMENTO
HAVING MIN(EDLI) >= 16
END-EXEC.
EXEC
SQL
FETCH XMP1
INTO :CAMPO1, :CAMPO2, CAMPO3
END-EXEC.
(Nos da la media
del salario y el valor minimo del campo EDLI por
departamento
cuando el campo sexo sea = 'V' y el minimo de EDLI
sea mayor o
igual que 16).
42
RECOMENDACIONES PARA EL DISEÑO DE APLICACIONES EN DB2
_____________________________________________________
WLM.-IBM
Son varias las
funciones involucradas e
implementacion de una aplicacion en DB2,
debiendo tener
cuenta el que
una misma persona puede realizar
mas de
funcion.
Las principales funciones que sera necesario desa
son:
ADMINISTRACION DE DATOS
_______________________
Las tareas a desarrollar
consisten en, sobre la base
tener una vision
corporativa de los
datos, desarrol
modelos
logicos y mantener diccionario de datos, ademas de
* Establecer
convenciones para la
denominacion de
entidades de datos,
las relaciones entre
datos y
atributos importantes.
* Definir reglas de integridad de datos.
* Desarrollar vistas de usuario.
* Soporte
al Administrador de
base de datos
y a
analistas de aplicaciones.
* Participar en las sesiones de diseño de base
de datos.
ADMINISTRACION DE BASE DE DATOS
_______________________________
Es
responsabilidad de esta funcion el diseño
y creacio
de objetos
DB2, tales como
tablas, vistas e
indic
incluyendo ademas:
* Diseño
de modelos fisicos de datos.
*
Desarrollo de nombres estandard para objetos
DB2 , ta
como
espacios de tablas, tablas, indices y vistas.
*
Definicion y creacion de objetos DB2.
*
Asistir a los analistas de aplicaciones
en los prototip
funcionales.
43
*
Desarrollar modelos de JCl para utilitis.
*
Recomendaciones de procedimiento de backup/recovery p
las
tablas de aplicacion.
*
Soporte a los programadores de aplicaciones en la prueba
las
aplicaciones DB2.
*
Participar en las revisiones de diseño de aplicaciones.
* Dar
soporte tecnico a miembros del equipo de desarrollo.
ADMINISTRACION DEL SISTEMA DB2
______________________________
Es
responsabilidad de esta
funcion el controlar
e
subsistema DB2.
Normalmente esta funcion
no existe
inicio,
y entonces es compartida por el Administrador
de
Base de Datos
y el Programador
del Sistema.
responsabilidades que incluye son:
*
Definir el entorno de operacion (hw. y
sw.).
*
Definir las opciones iniciales de instalacion.
*
Suministrar la guia de funcionamiento
al programador
sistema y al operador.
* Suministrar
informacion a la funcion de
planificacion
capacidad.
*
Establecer directrices de backup y recuperacion.
*
Controlar y perfeccionar el funcionamiento
del subsist
DB2.
*
Participar en las revisiones de diseño.
*
Realizar diagnostico de errores,tanto
del sistema como
aplicaiones.
*
Establecer directrices para el uso de
las funciones
seguridad del subsistema DB2 y
coordinar su uso con
funcion de seguridad de la organizacion de administracio
PROGRAMADOR DEL SISTEMA DB2
___________________________
Esta
funcion es similar a la tradicional de
programado
del
sistema, en lo que se refiere al entorno DB2 incluye:
44
*
Instalacion de los productos prerrequisito.
*
Instalacion de DB2 y otros productos relacionados.
*
Implementar procedimientos para
la determinacion d
problemas.
*
Aplicar mantenimiento de sw.
*
Ejecutar las herramientas de medicion
de rendimiento
control, suministrando la
informacion a las funciones
ADMINISTRACION DEL SUBSISTEMA DB2
Y DE PLANIFICACION
CAPACIDAD.
*
Implementar procedimiento de backup y recovery.
*
Suministrar autorizacion inicial.
*
Desarrollar procedimientos de operacion y entrenamiento
operadores.
OPERACION DEL SYSTEMA DB2
_________________________
Esta
responsabilidad incluye:
*
Arrancar, parar y controlar el subsistema DB2.
*
Controlar los mensajes
del DB2 y
tomar las accio
pertientes.
*
Comunicacion con los demas operadores
del sistema ( CIC
TP).
ANALISIS DE APLICACIONES
________________________
Esta
funcion tiene la responsabilidad de determinar
documentar los requerimientos de la aplicacion, incluyendo
definicion de las relaciones entre los datos y los modelos
uso. En concreto, esta
responsabilidad incluye:
*
Definicion de los requerimientos de la aplicacion.
*
Definicion de las relaciones entre datos y modelos usado
*
Desarrollo del diseño logico de la aplicacion.
*
Definir las especificaciones de los programas.
45
*
Coordinar las revisiones del diseño.
*
Coordinar las pruebas integradas de programas.
PROGRAMACION DE APLICACIONES
____________________________
Esta funcion es responsable del
desarrollo de programa
e
incluye:
*
Codificar y probar programas.
*
Implementar las reglas de integridad de datos.
* Codificar rutinas comunes, tales como rutinas
de sali
codigos de retorno del SQL,puntos de control logicos,etc
*
Creacion y carga de datos de prueba en tablas.
*
Participar en las revisiones del diseño y planificacion
pruebas.
*
Desarrollar procedimientos de backup y recuperacion para
aplicacion.
SOPORTE DE CENTRO DE INFORMACION
________________________________
El requerimiento de
esta funcion surgira si se van
utilizar
herramientas orientadas a usuarios finales,
ta
como QMF o
AS. Las responsabilidades que
incluye e
funcion
son:
* Añadir nuevos usuarios y mantener sus
profiles.
*
Soporte de consultas a usuarios finales.
*
Asistir a los usuarios en la localizacion y acceso de
datos
que requieren.
*
Controlar el uso de disco por los usuarios finales.
*
Desarrollo de consultas comunes y complejas.
46
REPRESENTANTES DE LOS USUARIOS
______________________________
Las
responsabilidades iniciales de los usuarios son:
*
Asesoramiento en la
identificacion y definicion de l
entidades de la empresa y de sus procesos.
*
Definicion de las reglas de integridad.
*
Definicion de los objetivos de seguridad, disponibilidad
rendimiento.
*
Pudiendo tambien involucrarse en la fase
de desarrollo
la
aplicacion,para facilitar la creacion de
prototipos
cons4
-- e informes.
En una fase inicial, las
funciones de ADMINISTRACION D
DATOS Y
ADMINISTRACION DE BASES DE DATOS, pueden ser asumi
por una
sola persona.
Igualmente que en el
caso anterior, las funcioones d
PROGRAMACION DEL SISTEMA DB2
y ADMINISTRACION DEL
SIST
DB2,
pueden ser tambien asumidas por una sola persona.
MACRO ACTIVIDADES A
DESARROLLAR EN UN PROYECTO
______________________________________________
¦Gestion de Proyecto.
PLANIFICACION¦Seleccionar la aplicacion piloto.
¦Definicion de estandares.
¦Identificar los recursos a proteger.
¦Definir el entorno de software.
¦Verificar requerimientos hw.
HW/SW INSTAL.¦Verificar
requerimiento sw.
¦Determinar las opciones de instal. del DB
¦Instalar DB2.
¦Preparacion del entorno.
¦Desarrollar rutinas y proc.
comunes.
DISEÑO Y ¦Analisis de la
aplicacion.
DESARROLLO ¦Diseño de Bases de
Datos.
APLICACION ¦Desarrollo de
programas y prueba.
¦Paso de desarrollo a produccion.
47
¦Procedimientos de arranque y parada.
¦Definir procedim. Backup y Recovery.
OPERACION Y ¦Preparar procedim.
de control.
RECUPERACION ¦Desarrollar proced. recovery y backup sis
¦Desarrollar proced. backup y recovery de
¦ aplicaciones.
¦Estrategia de desarrollo.
GESTION RDTO ¦Definir entorno de herramientas.
¦Analizar y refinar.
¦
De la lista de actividades expuesta, como se observ
existen
algunas que solo es necesario
realizarlas una v
otras que habra
que realizarlas ciclicamente y
finalme
aquellas
que son propias de cada aplicacion a desarrollar.
Del
conjunto de funciones
expuestas, sera necesari
asignarlas a personas que formen
parte del Proyecto y que
menos
seran:
* Una
persona como Administrados
de Base de
Datos
Administrador de Datos.
* Dos analistas de aplicaciones, uno actuando
como lider
proyecto.
* Dos o mas programadores de aplicaciones.
* Una persona, con el papel de Programador
del Sistema
Administrador de Datos del Sistema.
PLANIFICACION.
_______________
1.-Gestion del Proyecto.
Consistira en el
desarrollo de la planificacion
Proyecto
, definiendo la duracion de cada una
de las
tareas y la
dedicacion a ellas de los recursos del equi
que en
algunos casos no sera del 100%.
I5
Planificacion de la formacion y entrenamiento
diferentes miembros del equipo.
2.-Seleccion de la aplicacion piloto.
En la que
participaran el administrador de la bas
datos y analista de aplicaciones.
48
Debera ser una aplicacion de bajo riesgo, que tenga
amplio espectro de
aplicacion de herramientas,
c
simulacion completa y
no compleja ademas
de facil
demostrar a los usuarios finales.
3.-Definicion de Estandares.
Participaran en administrador
de base de
datos
administrador de datos, el
programador del sistema
y
analista
de la aplicacion.
Su
actividad consistira en :
a) Denominacion de los
objetos DB2, programas, cop
transacciones, usuarios, jobs.
b) Directrices para
el diseño de
tablas y de
aplicacion.
c) Directrices para la
programacion de la aplicacion
d) Directrices de documentacion.
e) Procedimientos especificos de
instalacion.
4.-Identificar los recursos a proteger.
Definir un entorno
de acceso limitado de datos
autorizaciones
y responder a los requerimientos de auditor
Ser responsable el administrador
del sistema, y a
personal que tenga la
responsabilidad de mantener el ento
de
seguridad. Ademas participarna el administrador
de ba
de datos
y analista de aplicaciones.
Las tareas a realizar son:
*
Definir los objetivos de seguridad.
*
Identificar los recursos a proteger.
*
Establecer los grupos de autorizacion.
DISEÑO Y DESARROLLO DE LA APLICACION
____________________________________
1.-Establecer el entorno de desarrollo de la aplicac
Consistira en preparar
el entorno de
trabajo
programador de aplicaciones, en cuya actividad participara
49
administrador del sistema
y el administrador de bases
datos.
El entorno de
trabajo estara integrado por librer
procedimientos (jcl's, utilidades, etc.) y rutinas comunes
verificacion SQLCA, frecuencia de puntos de control,etc).
2.-Analisis de aplicaciones.
Consistira en la
eleccion y aplicacion
de
metodologia por parte de los analistas de aplicaciones,
para las
tareas de:
*
Definicion de requerimientos.
* Diseño
externo.
* Modelo
logico de datos.
* Diseño
interno.
Actividades importantes, integradas
en las señala
son:
-
ANALISIS DE DATOS.
-
DESARROLLAR PROTOTIPOS FUNCIONALES ( QMF, CSP, SQL
-
DIRECTRICES PARA EL DISEÑO DE APLICACIONES.
3.-Diseño de Base de Datos.
Tarea a realizar por el administrador de base de da
con la
colaboracion del analista de aplicaciones.
4.-Desarrollo y prueba de programas.
Consistira basicamente en la
codificacion y prueb
los
programas de la aplicacion, el responsable
directo s
el programador
de aplicaciones y
tambien participara
analista
de aplicaciones el el
administrador de base
datos.
Las tareas a realizar son:
*
Crear datos de prueba.
*
probar las llamadas SQL.
*
Desarrollar los programas.
* Prueba unitaria.
*
prueba integrada.
50
5.-Paso de Desarrollo a Produccion.
El responsable ser el lider del projecto y partici
todo el equipo
en esta actividad,
cyuas tareas
importantes son:
*
Desarrollar el plan de migracion.
*
Revisar el rendimiento de la aplicacion.
*
Obtener el espacio en disco de produccion.
*
Informar al personal de produccion de la carga esperada.
*
Desarrollar una lista de puntos claves para el manejo
problemas.
* Mover
definiciones de bases de datos (DDL).
* Crear
librerias y mover programas de aplicacion.
*
Realizar la integracion de las tareas en CICS, TSO.
* Cargar
nuevos datos.
* Nuevos
usuarios.
*
Establecer autorizaciones.
*
Ejecutar RUNSTATS.
*
Preprocesar, compilar, link y bind de programas.
* Pasar
el EXPLAIN a todos los planes y verificar que se u
los
caminos esperados.
*
Establecer procedimientos de contabilidad.
El DB2 suministra
rutinas de servicio
llam
"attachement
facilities" que conectan
el programa
aplicacion
al DB2 para
permitir usar sus servicios.
comando
DSN y sus interfases asociadas, DSNELI
(para TSO
Batch ), DSNCLI ( para CICS ) ,
son las facilidades stand
de
conexion al DB2.
Por
tanto cualquier programa
de aplicacion
totalmente dependiente de la conexion al DB2. Por ejemp
no se
pueden cambiar los
nombres de planes,
antes
finalizar la aplicacion.
Si el DB2
termina, tamb
terminar la aplicacion.
51
DISEÑO DE BASES DE DATOS
________________________
INTRODUCCION.-
______________
En
el proceso de diseño de bases de datos, deber a h
una
primera fase de
diseño en la
que se definiese
"Arquitectura de datos"
o "Modelo de datos corporativo",
represente de forma general
a la entidad,
sin entrar
detalles, simplemente a
nivel de U Grupos
de Datos
Relaciones entre estos U (
un empleado, un departament
cliente, un prestamo, etc.), lo cual supondra el
inicio
diseño
del Sistema de Informacion de la entidad.
Una vez cubierta la fase
anterior, se iniciara
proceso de analisis
de cada una de las
aplicacione
subsistemas definidos en el Sistema
de Informacion, y
consiguiente al "analisis de los datos"
propios de
aplicacion, definiendo entonces el
contenido de pantall
informes
y otros ficheros que requiera el usuario.
DISEÑO LOGICO DE BASES DE DATOS
_______________________________
A)ANALISIS DE DATOS.
____________________
1)Establecer normas de
denominacion de los
datos p
evitar
sinonimos(elementos con diferente nombre
y mi
significado) y homonimos (elementos con el mismo nombr
diferente significado).
2)Durante la elaboracion
del modelo de
datos, nue
U
entidades U se crearan
siempre que dos
entid
U
relacionen U en una forma varios a
varios.
Un
ejemplo podra ser que un cliente ha
prestado vari
avales
y que un aval ha sido hecho por varios clientes.
cual
nos llevara a aconsejar la creacion
de una ta
extra
de Avales/clientes.
En esta fase
se definiran tambien los atributos de
relaciones y de
las entidades. En
consecuencia
diferentes items de
datos que integran
una entida
mediante que claves y tipos de
las mismas establecere
las relaciones entre las diferentes
entidades.
52
3)En la teoria
relacional, clave primaria o candidata
implica camino de acceso o secuencia.
4)Foreign keys son frecuentemente buenas candidatas para
rendimiento de indices. (se puede
usar en joins).
Las
Foreign Keys son las llamadas "claves ajenas", es de
columna(s) de una entidad que es clave primaria en otra.
Siendo
muchas veces "claves candidatas" en la primera.
5)Un
"Clustering index" es aquel que determina el orden
fisico
de las filas de una tabla.
B)NORMALIZACION
_______________
Una
vez realizado el analisis de datos,
se procedera
normalizar las entidades (tablas) en tercera forma norma
1)Primera forma normal. Consiste en la eliminacion de
campos repetitivos mediante
la creacion de
una nu
entidad. La cual
incluye una Foreign
Key en la nu
entidad, para asi
poder realizar JOIN
con las
entidades.
La importancia de
esta normalizacion, viene
d
fundamentalmente por la eliminacion de campos repetidos
dara
lugar a un no deseado
mantenimiento de los
cam
implicados.
2)Segunda forma normal. Consiste
en determinar que da
elementales son dependientes
de campos de
clave
primaria. Una nueva entidad se creara con
estos camp
incluyendo tambien una
foreign key en la nueva entid
para
asi poder hacer join con las dos.
3)Tercera forma normal. Consiste
en determinar que da
elementales son
dependientes de solamente una parte de
clave
primaria. Una nueva entidad
se creara con es
campos, incluyendo una
foreign key en la nueva entid
para
asi poder hacer join con las dos entidades.
La
importancia de la normalizacion en segunda
y terc
forma
normal, consiste en evitar anomalias de actualizac
( en
especial en lo que se refiere
a la integridad
datos, tal como borrado desintencionado
de registros ).
una
tabla contiene campos no
dependientes de la cl
primaria completa, entonces
podran darse anomalias en
actualizacion.
53
C)INTEGRIDAD REFERENCIAL
________________________
La
integridad referencial puede ser definida como:
* Siempre
que se necesita cambiar
una tabla (insert
actualizar, borrar), que condiciones deben existir en
otras
tablas?.
*
Siempre que se modifica una tablas,
que otras tab
deben
ser cambiadas?.
Estos
aspectos afectan al desarrollo, a la planificacion
la
recuperacion, etc.
NOTA:
En la version 2 del DB2, la integridad referencial
una
funcion del DB2, la cual asegura la validacion de la
relaciones entre una y otra tabla. Se pueden definir
criterios referenciales, por ejemplo el que un empleado
pueda
ser dado de alta en una departamento si este no
existe. Tambien que una fila de una tabla de departament
no
puede ser borrada, mientras existan empleados asignad
a ese
departamento, etc.
INTEGRIDAD DE DATOS:
_____________________
1.-UN
ADECUADO DISEÑO DE BASE DE DATOS.
_______________________________________
*
ANALISIS TOTAL DE LOS DATOS.
Todos los campos que son necesarios y no derivabl
almacenaran en una tabla.
*
NORMALIZACION DE LOS DATOS, PARA EVITAR:
Restricciones artificiales en la aplicacion.
Almacenamiento redundante de
datos. (excepto p
Foreign Keys).
Cualquier posible anomalia en la actualizacion.
54
2.-UN
ADECUADO DISEÑO DE MODULOS, CODIFICACION Y PRUEBAS.
_________________________________________________________
*
Implementar las reglas
de integridad refere
definidas al diseñar las bases de datos.
*
Definir e implementar
las unidades logica
trabajo.(LUW)
Para en cada una de ellas poder
establecer los p
de
Commit en los programas batch
o de Sync
en
interactivos.
Esto es un aspecto importante en cuanto a integrida
rendimiento.
-Una orientacion en programas interactivos puede ser:
Diseñar la aplicacion de
tal modo que
una LUW
corresponda con cada pantalla que
se visualiza.
Siempre que haya
un CICS RETURN
supone un S
implicito.
Evitar cancelaciones, de tal forma que cualquier cod
de retorno imprevisto, suponga un rollback y
mensajes
usuario, ademas de escribir la SQLCA en
un fichero
errores.
Una LUW se
corresponde con el uso de un thread,
c
tiempo debe minimizarse,
por cuanto supone
asig
recursos ( plan,
DBD's, espacio de tablas, indices
por
ello el thread debe procurar liberarse
cuando
dialoga con el terminal. Debe
tambien recordarse que
Rollback actua desde el ultimo commit o sync.
-Una orientacion en programas batch puede ser:
En programas de significada actividad de actualizac
ser necesario usar Commit y
prever restauracion logi
Las
Commit deberan hacerse cada cierto numero de LUW,
base a cuantos bloqueos puede tener el IRLM ( esto
aplicable a bloqueos de
paginas o tambien cada 10 o
minutos.
No
olvidar que todo programa batch que realice
Com
periodicos debe tener restauracion logica o debe po
volver a ser ejecutado sin afectar a
la integridad
los datos.
55
RENDIMIENTO Y CONCURRENCIA EN BASE DE DATOS
___________________________________________
ALGUNOS
DE LOS FACTORES CLAVES SON :
____________________________________
A)CONCURRENCIA.
______________
*
Esperas por liberacion
de bloqueos pueden esconder
causa de un lento rendimiento.
*
Pueden producirse fallos
del SQL debido
a que
sobrepasa el numero
de bloqueos concurrentes del I
debido a un lock timeout o a un deadlock.
B)TRABAJO REALIZADO POR EL DB2 PARA EL SQL.
___________________________________________
* El
factor clave consiste en el numero de paginas que
leidas y/o escritas por el DB2,lo cual es funcion del
de
acceso y la cardinalidad de las columnas.
-Informacion sobre la cardinalidad de las columnas
disponible en el
Catalogo del DB2
(
SYSIBM.SYSCOLUMNS.COLCARD), para
columnas que son
primera de un indice. Informacion
sobre la cardinali
de
indices completos tambien
esta disponible en
Catalogo del DB2
(tabla SYSIBM.SYSINDEXES, colum
FIRSTKEYCARD Y FULLKEYCARD.
-Informacion sobre el plan de acceso esta disponible
DB2
EXPLAIN. Se puede usar para una sentencia SQL o p
una
Plan completo. Esta informacion incluye:
Secuencia en la que
los conjuntos (query-blocks)
sentencias son procesadas. (ejemplos de sentencias
que
tiene varios query-blocks son subselects,
UNIONs
JOINs).
Secuencia de acciones dentro de un query-block.
Si se esta usando un indice. (se suministra el nomb
Como se esta usando un
indice (MATCHCOLS=0 indic
busqueda por indice con mucho tiempo de ejecucion).
56
Si hay bloqueo
a nivel de pagina o espacio de
tabl
(TSLOCKMODE). Cuando es
igual a
X o S
reducira
concurrencia.
Si se hace clasificacion y porque. (hay ocho column
de
indicador de sort).
*
LOS SIGUIENTES ASPECTOS AFECTAN A LA ELECCION DE U
DE
ACCESO DEL DB2.
La
consulta.
Los
indices definidos.
Los
parametros DDL. (ejemplo locksize).
Los
parametros bind. (ejemplo isolation).
Las estadisticas en el DB2 para
el espacio de tablas,
tablas y los indices, incluyendo:
-Tamaño de la tabla.
-Cardinalidad de los indices.Indices con pocos valo
distintos son menos usados por el DB2.
-Como esta
organizado el espacio
tablas.(clustered?).
-Como estan organizados los indices,
-Cual es el nivel de actualidad
de las estadisti
respecto
al estado actual de los datos(RUNSTATS).
*
DEFINIR SOLAMENTE LOS INDICES IDONEOS (UTILES), LOS
DEGRADAN PROGRAMAS DE USUARIO Y DE UTILIDAD.
*
TABLAS E INDICES BIEN ORGANIZADOS REDUCEN I/Os.
El catalogo del
DB2 nos informa
de este ni
organizacion.
*
IMPRESCINDIBLE EL USO DE PROTOTIPOS.
DISEÑO FISICO DE BASES DE DATOS
________________________________
A
continuacion vamos a ofrecer una serie de recomendacio
en la
definicion de los diferentes objetos del DB2:
Gru
de
almacenamiento, Bases de datos,
Espacios de tabl
Tablas, Indices y Vistas.
57
1)Si
las tablas usan muy frecuentemente el JOIN, habra
considerar la posibilidad
de desnormalizar las tabl
almacenando los datos duplicados
para evitar la necesi
del
JOIN.
Habra que analizar
el equilibrio entre el incremento
coste
del JOIN y el incremento del coste
de mantenimie
de datos duplicados.
2)Aconsejar el uso de
NOT NULL en las columnas, a no
que
exista requerimiento por parte de la aplicacion. C
columna nula afecta negativamente al rendimiento y requi
un
byte extra por fila y ademas
complican la logica
programa, que debe verificar las nulas,
3)Colocar las columnas VARCHAR al
final de la tabla. E
tipo
de columnas solo se definiran, cuando la
variabili
del
tamaño sea significativo, unos 20 bytes de media.
4)El usar ficheros Vsam definidos
por el usuario, en lu
de la
definicion de grupos de
almacenamiento, da ma
flexibilidad en la
operacion. Permitiendonos incremen
espacios de tablas o indices y/o mover un fichero DB2
tener que hacer
descarga, borrado, y carga de la
tab
se
podra usar el REORG con UNLOAD o DSN1COPY
para camb
de
lugar ficheros DB2).
5)Limitar el nombre de indice a ocho caracteres, para po
usar el mismo
nombre cuando se
usen grupos
almacenamiento o se definan ficheros DB2.
6)Asignar un prefijo a los objetos DB2 por cada aplicaci
para
facilitar las consultas al catalogo del DB2.
7)Se
aconseja una tabla por espacio de tablas.
8)Usar
LOCKSIZE TABLESPACE:
Cuando una tabla es accedida en modo de solo lectura
Cuando un solo
usuario la actualiza.
(ej. progr
batch).
Recordar que este
atributo se puede
modificar ante
despues de ejecutar un programa mediante
el bind. O
solucion sera codificar LOCK
TABLE en el programa.
En este caso
tambien es aconsejable usar SUBPAGES = 1
los
indices.
58
9)Usar LOCKSIZE ANY cuando se ha decidido bloqueo de
En
este caso el DB2 actua de la siguiente manera:
* En el
momento del BIND el DB2 elige normalmente bloq
de
pagina, a excepcion de que ISOLATION = rr y scan de
tabla
se realize.
*
Durante la ejecucion el DB2 escalara el bloque a nivel
tabla si, y solamente si, el
numero de paginas actualme
bloqueadas en la tabla exceda al numero especificado c
limite
en NUMLKTS.
En
este caso subpages debe ser > 1 , en base
al nivel
actividad y al tamaño de la tabla.
10)Usar CLOSE = NO a no ser que el fichero se use muy
11)Todos los accesos a los datos
deben de realizarse
a
traves de VISTAS, nunca a
traves de las
tablas
Incluso en el supuesto de que la
VISTA sea igual a la t
Tambien conviene definir sinonimos para cada vista,
de
forma que los accesos sean independientes del creador
tabla
o vista.Otras ventajas son:
* Incrementa
la flexibilidad de
la autorizacion :
usuarios de la vista tendran acceso solamente a las col
de la
vista.
*
Incrementa la simplicidad de las sentencias SQL: Limi
el
acceso al conjunto de filas y
columnas que integra
vista.
* Incrementa
el control sobre los programas y sus acce
los
datos.
(
SELECT USER FROM SYSAPPL.USERVIEW )
12)Antes de cargar los
datos crear siempre
prime
indices.
13)Considerar el particionar grandes tablas. La elecc
numero
de particiones sera en base al tamaño de la tabla
numero de indices,
la configuracion de
los discos
planificacion de utilidades.
*
Facilita el REORG , COPY y RECOVER por particion.
* Facilita
el reducir de tamaño los ficheros del DB2.
* Un
aspecto importante es en que medida es particiona
la
clave del cluster. Puede ocurrir que
la naturaleza
los datos dificulten una buena o
aceptable distribucion
las
particiones. En caso de
que la clave
primaria
59
consideremos como "no particionable", las soluciones son
-Tener
una gran tabla.
-Crear
multiples tablas.
-Definir otro indice primario que facilite la particion.
* En
general evitar tener tablas o particiones
mayores
35%
del disco.
14)Normalmente usar solo PCTFREE,
para establecer el
libre.
15)En tablas pequeñas considerar espacio
libre extra
reducir la contencion. Consideraciones generales entor
espacio libre son las siguientes:
* A
mayor espacio libre:
-menor frecuencia de Reorganizacion.
-menor contencion.
-incremento del tiempo de ejecucion de los programas d
-incremento de I/O de una
sentencia SQL que
acce
multiples filas.
-mayor ocupacion de disco.
16)Aspectos generales de almacenamiento, que pueden
al
rendimiento.
* En
tablas de acceso muy frecuente,
procurar colocarl
en los
discos mas rapidos y en los de cabecera.
* La
anterior recomendacion aplicarla al Catalogo y
Directorio del DB2.
* Igualmente con lo referente
a los
espacios de tabl
temporales del DB2.
(usadas en join, subselect, ord
by,..).
*
Procurar evitar el uso de espacio secundario en datos
indices, ajustando adecuadamente el tamaño de las
tabla
El uso
de espacios secundarios degrada el rendimiento.
*
Cuando se usen grupos de almacenamiento, asignar un so
volumen a cada grupo. Facilitara
el control.
*
Evitar usar mas del 75% de cada volumen.
60
SELECCION DE INDICES
____________________
La seleccion
de indices es
uno de los
aspectos
importantes en el diseño, siendo la mas notable consecuen
el rendimiento,
ademas de permitirnos forzar la unicidad
registros en donde la clave sea unica.
1)Cuando
para una tabla se defina mas de un
indice, defi
de forma
explicita el indice cluster. Debiendo ser aq
bajo
cuyo criterio es normalmente procesado
el conjunto
datos.
2)Evitar indices que
empiecen por la misma columna, con
excepcion de que
las pruebas demuestren
una utili
importante.
3)En indices de
multiples columnas, la
secuencia de
columnas es un aspecto muy importante, especialmente en
que se
refiere a la primera columna. Todo ello
es critico
la seleccion
del camino de
acceso y por
tanto en
rendimiento. Consultar manual
GG24-3004.
4)Es
necesario analizar la relacion coste-beneficio existe
en cada
indice candidato, antes de decidir su utilizacion.
* Los
costes aumentan :
-Al realizar inserciones, borrados
e incl
actualizacion.
-Al
procesar utilidades (LOAD, REORG, CHECK y RUNSTATS
* Los
beneficios son:
-Muy limitados si el DB2 tiene ya un indice alternat
que
le permitira realizar
de forma eficiente
sentencia SQL.
-Reduccion del tiempo de acceso a los datos.
-Reduccion del tiempo
de proceso, al
poder reali
funciones sin tener que hacer una clasificacion previa
5)Una
vez cargadas las tablas, realizado el RUNSTATS y he
el bound
de los planes de la aplicacion, se debe analizar
los
indices definidos estan siendo
usados eficientemente
determinar las causas de situaciones diferentes, para po
decidir si es necesario anular o
crear otros indices.
61
Para
ello es necesario trabajar sobre un
entorno de tab
muy
similar al que vaya a darse en produccion.
*
Consultar las tablas de SYSINDEXES Y SYSCOLUMNS, para
-analizar en que medida un indice es unico o
no.
-que indices no
estan siendo usados
por las
estaticas.
-si
un indice no es usado, puede ser debido
a unas
defectuosas o que sobra el indice.
-para las sql
dinamicas hacer un
seguimiento con
Explain.
DISEÑO, CODIFICACION Y PRUEBA DE APLICACIONES
_____________________________________________
ACCESO DE DATOS
_______________
Hemos
señalado anteriormente que los
programas y consul
almacenadas, accederan siempre a las tablas atraves de VIS
, lo
cual hace que las sentencias sql sean independientes
creador
de las tablas y de los cambios de las mismas.
Otros
aspectos importantes a tener en cuenta son:
1)Evitar
que en las
clausulas WHERE se den las siguien
condiciones:
-Forzar hacer la
conversion numerica para
colum
numericas. Para ello
se deben hacer
las variable
literales
host, del mismo
tipo de datos,
precision
escala.
-Especificar una serie de
caracteres mayor que la longi
de la
columna. Procurar siempre que la
variable o lite
sea
menor o igual en tamaño.
-Codificar argumentos de
busqueda que constitu
predicados que el DB2 no pueda decidir su uso
contra
indices. Estos aspectos
son ampliamente analizados
GG24-3004.
2)Si hay varias
tecnicas para codificar una sentencia S
analizar
cual de ellas es la mas eficiente.
62
3)Algunas tecnicas que ayudan a elegir el
mejor camino
acceso
son:
a)Si
se va a actualizar una columna de un indice, entonc
este
indice no se considerara por el DB2 en sus criterio
de
busqueda. El procedimiento aconsejable sera:
1)DECLARE y OPEN, una SELECT con el criterio de actualiz
2)FETCH a fila ( proxima).
3)Cambiar el valor de la columna en el programa.
4)DELETE de fila usando la clave primaria unica.
5)Re-Insertar la fila con el nuevo valor de la columna.
6)Repetir los pasos 2-5 para continuar actualizando fila
4)Siempre que sea posible usar JOIN's en lugar de Subquery
Prototipo previo.
5)Evitar el uso del operando OR,
a no ser que cada predic
se refiera
a la misma columna y el operador
de comparac
sea =.
-Una alternativa al OR es
UNION. Tener en cuenta que e
opcion
no presenta registros duplicados.
6)Si en
el acceso a grandes volumenes de
informacion se
obliga
al DB2 a hacer Sort interno, porque no disponga en
acceso de un indice ( casos de JOIN,
ORDER BY, GROUP
DISTINCT), entonces valorar el hacer un DFSORT.
DESARROLLO Y PRUEBA DE PROGRAMAS
________________________________
1)Fase
de prueba unitaria.
--------------------------
Cada
desarrollador debe responsabilizarse
de precompil
compilar, linkeditar y hacer bind
de sus programas, ade
de
disponer de sus tablas de prueba, para lo cual cada
podra tener su
propia base de
datos y grupos
almacenamiento. Todo ello
reducira ademas la
contenc
en el
catalogo del DB2.
63
2)Fase
de Prueba de la aplicacion.
----------------------------------
Primero se debe
determinar que usuario
hace
precompilacion, compilacion, linkedita y bind, evitando
el que si otro usuario hace el bind del plan, el
origi
pierda
la autoridad sobre el mismo.
Determinar que ficheros se utilizaran en las pruebas par
-codigo fuente.
-DBRM.
-Modulos.
-JCL's.
Prever
un mecanismo para determinar que
planes deben
rebound, cuando un
programa se modifica.
( tabla
catalogo : SYSIBM.SYSDBRM ).
¦ Programa ¦
¦ Fuente ¦
¦
v
¦ Traductor ¦
¦ Comandos Cics ¦
¦
v
¦ Precompilador ¦
¦ DB2 ¦
¦
¦ ¦
v v
¦ DBRM
¦ ¦ Compilador ¦
¦
Cobol ¦
¦
v ¦
¦ BIND
¦ v
¦
linkaje ¦
¦
v ¦
¦ PLAN
¦ v
¦
modulo ¦
El Plan
se almacena una tabla del catalogo del DB2, y es
consecuencia de las sentencias SQL, de las definiciones de
las
tablas e indices sobre las que actua, etc., con objeto
optimizar el camino de acceso a los datos.
64
GESTION DE CAMBIOS EN BD
________________________
Por
cambios en :
-Tablas y/o vistas (DROP, CREATE, ALTER).
-Adicion o baja de indices.
-Cambios en el espacio de tablas (ALTER).
A)Si una
tabla y/o indice se crea y se carga
con datos,
inmediato se debe:
1)RUNSTATS sobre los objetos afectados.
2)Todos los planes
afectados por los cambios deben
rebound.
B)Si se
crea una nueva tabla y/o vista o dropped, y recrea
Entonces
se debe de hacer inmediatamente:
1)Hacer un re-GRANT
de autorizacion para
la tabla
vista.
2)Avisar a los
usuarios afectados para
re-CREATE
sinonimos para la tabla y/o vista.
3)Todos los planes
afectados por el
cambio debe
rebound. (*).
(*)
Tambien despues de ALTER una
tabla, un espacio
tablas
o indice y despues de DROP de un indice.
OPTIMIZACION DEL BIND
______________________
1)Se hara un
REBIND de un plan siempre que se desee que
DB2
vuelva a determinar sus caminos de acceso.
Algunos ca
son:
-Despues de crear
un indice para una tabla que ya
te
datos.( CREATE ---> RUNSTATS ---> REBIND ).
-Despues de ALTER un espacio de tablas, tabla o indice.
-En la
mayoria de los casos, despues de un RUNSTATS.
-Despues de cambios significativos en los datos:
REORG
---> RUNSTATS ---> REBIND
65
2)Para
reducir el numero de bloqueos de paginas,
hacer B
con
ISOLATION = CS (cursor stability, es aconsejable desde
punto de
vista de concurrencia, si se va a acceder
una s
vez a
una fila en una transaccion, pero si se accede a
misma
file varias veces no se garantiza
consistencia,
tanto cuando existen
razones de integridad
se requi
ISOLATION = RR (lectura repetible).
3)Para mejorar el
rendimiento : BIND
con RELE
(DEALLOCATE)
Para
mejorar la concurrencia BIND con RELEASE (COMMIT).
Nota: En la
preparacion de esta
primera parte se
utilizado, basicamente, el
GG24-3004-00 IBM DATABASE
APPLICATION DESIGN
AND TUNING GUIDE,
el SC26-413
Development
Guide y la
publicacion DB2 APPLICAT
DEVELOPMENT
RECOMMENDATIONS.
NUEVAS FUNCIONES Y MEJORAS DEL DB2 R3
_____________________________________
Resumimos en este
apartado las mejoras
que
referencian en el manual
GG24-3182 : IBM DATABASE 2 RELE
3
NOTEBOOK. En el citado manual
existen tambien ejemp
sobre la
aplicacion de las mejoras aportadas por el DB2 R3
1.-MEJORAS EN EL LENGUAJE SQL:
A)Funciones escalares para:
*
Convertir valores de un tipo de datos a otro.
*
Extraer sub-series de series.
* Sustituir valores NULL en busqueda de datos, por o
valor especificado por el usuario,
Las
nuevas funciones escalares son:
DECIMAL, DIGI
FLOAT, HEX, INTEGER, LENGTH, SUBSTR,
VALUE Y VARGRAPHI
Las anteriores
funciones : MAX, MIN, COUNT, AVG
y S
ahora se denomina funciones de columna.
B)Nuevo operador de concatenacion para series.
66
C)Mejoras en el operador UNION:
*
UNION ALL para retener valores duplicados.
*
Eliminacion de restricciones del UNION.
D)Eliminacion de algunas restricciones
en :
* Operador UNION ALL.
* Operador LIKE.
* INSERT con
subselect.
*
Clausula SET de la sentencia UPDATE SQL.
E)Posibilidad de manejar los errores de division por c
y otras operaciones
de conversion y
aritmeti
invalidas.
F)Nuevos tipos de datos : DATE,
TIME y TIMESTAMP.
G)Nuevos tipos de datos para numeros
de simple precis
y
coma flotante.
H)Eliminacion de algunas restricciones de las VIEW.
2.-MEJORAS EN LA OPERACION.
A)Soporte DL/I Batch.
B)Mejoras en programas de utilidad:
* LOAD REPLACE de una
particion. Antes solo era posi
a
nivel de espacio de tablas.
*
MODIFY .... (*) , que permite
a un usuario bor
todas las entradas
en SYSIBM.SYSCOPY, de un espacio
tablas, particion o fichero.
*
RECOVERY INDEX que permite recuperar de una pasada
lista de indices
o todos los indices de un espacio
tablas.
67
*
RUNSTATS mejorado, al recojer mejores estadisticas p
incrementar el rendimiento de las
sentencias SQL.
3.-MEJORAS DE RENDIMIENTOS.
A)En
los programas de utilidad reseñados.
B)en UNION ALL.
C)En :
* Evitar sort innecesarios en
ORDER BY y GROUP BY.
* Clasifica el
resultado de una IN subquery.
68
________________________________________________________________
________________________________________________________________
SE DEBEN
UTILIZAR VARIABLES DEFINIDAS
EN NIVEL 01 DE
D PARA
CONDICIONES DE BUSQUEDA
DEL DB2. LAS
VARIABLES
A CLAUSULA
WHERE HAN DE
ESTAR DEFINIDAS EN
LA WORKING,
GARANTIZAR UN
RESULATADO OPTIMO.
________________________________________________________________
________________________________________________________________