Manual Del Usuario_DB2

download Manual Del Usuario_DB2

of 64

Transcript of Manual Del Usuario_DB2

  • 7/28/2019 Manual Del Usuario_DB2

    1/64

    INDICE________

    CONCEPTOS.

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

    MECANISMOS DE SEGURIDAD DE LOS DATOS.

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

    MECANISMOS DE INTEGRIDAD DE LOS DATOS.

    Concurrencia ............................................. 3Recuperacion de datos .................................... 3- Unidad de recuperacion ............................... 3

    Ayudas a la programacion ................................. 4- Spufi ................................................ 4- Paneles para preparacion de programas ................ 4- Paneles para mantenimiento de planes ................. 4- DCLGEN (Declarations Generator) ...................... 4- Online Help .......................................... 5

    ESTRUCTURA DE UN PROGRAMA QUE OPERA EN UN ENTORNO CICS.

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

    INSTRUCCIONES S.Q.L.

    Instrucciones basicas .................................... 7Clausula Where ........................................... 8Select into .............................................. 8Update ................................................... 9Delete ................................................... 9Insert ................................................... 10Insercion a la vez de varias filas de una tabla en otra .. 10Funciones del cursor ..................................... 11Declare cursor ........................................... 11Open ..................................................... 12Fetch .................................................... 12Whenever not found ....................................... 13Update ................................................... 13Delete ................................................... 14Close .................................................... 14

  • 7/28/2019 Manual Del Usuario_DB2

    2/64

    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) ... 20Opciones de las condiciones de busqueda .................. 21- Between ... And ...................................... 21- In ................................................... 21- Like ................................................. 21- Is null .............................................. 22

    VISTAS.

    Concepto ................................................. 22Proceso de una vista ..................................... 23Subquery ................................................. 24Formas de incluir una subquery en una clausula where ohaving ................................................... 24- Inmediatamente despues de un operador de comparacion.. 24- Despues de un operador de comparacion seguido de allo 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 ..................................... 26Otros ejemplos ........................................... 26- Con una SELECT ....................................... 26- Con una UPDATE ....................................... 27- Con una DELETE ....................................... 27

    SPUFI.

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

    PANELES.

    Panel Principal .......................................... 28- Especificar un fichero de entrada .................... 28- Especificar un fichero de salida ..................... 28

    - Especificar las opciones de proceso .................. 29Panel de opciones por defecto ............................ 29

  • 7/28/2019 Manual Del Usuario_DB2

    3/64

    - Especificar otras opciones de proceso ................ 29- Definir caracteristicas del fichero de salida ........ 29- Especificar defectos para el formato de salida ....... 30

    Panel Commit/Rollback .................................... 30Restricciones ............................................ 30

    CODIFICACION DE INSTRUCCIONES SQL EN UN PROGRAMA COBOL.

    Definir un area de comunicacion llamada SQLCA ............ 31Describir cada tabla o vista a la que acceda el programa . 31Codificar instrucciones SQL .............................. 32- Variables y estructuras host ......................... 32- Variables indicador .................................. 33

    Manejo de codigos de retorno de errores : LA SQLCA ....... 33Manejo 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 .. 36Notas sobre DB2 / SQL .................................... 37

    APENDICE I.

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

    RECOMENDACIONES PARA EL DISEO DE APLICACIONES EN DB2.

    Administracion de datos .................................. 42Administracion de base de datos .......................... 42Administracion del sistema DB2 ........................... 43Programador del sistema DB2 .............................. 43Operacion del sistema DB2 ................................ 44Analisis de aplicaciones ................................. 44Programacion de aplicaciones ............................. 45Soporte de centro de informacion ......................... 45Representantes de los usuarios ........................... 46Macro actividades a desarrollar en un proyecto ........... 46- Planificacion ........................................ 46- Hw/sw instal. ........................................ 46- Diseo y desarrollo aplicacion ....................... 46- Operacion y recuperacion ............................. 47- Gestion Rdto. ........................................ 47

    PLANIFICACION.

  • 7/28/2019 Manual Del Usuario_DB2

    4/64

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

    DISEO Y DESARROLLO DE LA APLICACION.

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

    DISEO DE BASES DE DATOS.

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

    DISEO LOGICO DE BASES DE DATOS.

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

    INTEGRIDAD DE DATOS.

    Un adecuado diseo de base de datos ...................... 53- Analisis total de los datos .......................... 53- Normalizacion de los datos ........................... 53

    Un adecuado diseo de modulos, codificacion y pruebas .... 54

    RENDIMIENTO Y CONCURRENCIA EN BASE DE DATOS.

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

  • 7/28/2019 Manual Del Usuario_DB2

    5/64

    CONCEPTOS_________

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

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

    TABLAS______

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

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

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

    TIPOS DE DATOS QUE PUEDE CONTENER UNA COLUMNA DE UNA TABLA__________________________________________________________

    . Cadenas de caracteres EBCDIC:CHAR - Cadenas de longitud fijaVARCHAR - Cadenas de longitud variable

    . Datos numericos:SMALLINT - Enteros binarios de media palabraINTEGER - Enteros binarios de una palabraDECIMAL - Numeros decimalesFLOAT - Numeros de coma flotante

    . Cadenas de caracteres graficos:GRAFHIC - DBCS (Double Byte Character Data) de longitud fijaVARGRAPHIC - DBCS de longitud variable

    INDICES_______

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

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

    El DB2 nunca usa como indice una columna que va a ser actualizada, o

    una columna que esta siendo comparada con otra de la misma fila.

  • 7/28/2019 Manual Del Usuario_DB2

    6/64

    MECANISMOS DE SEGURIDAD DE LOS DATOS____________________________________

    VISTAS______

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

    RACF (Resource Access Control Facility)_______________________________________

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

    torizados, a los ficheros vsam que contienen las bases de datos, a undispositivo 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 usuarios.MECANISMOS DE INTEGRIDAD DE LOS DATOS_____________________________________

    CONCURRENCIA____________

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

    La concurrencia es controlada mediante LOCKS. Consisten en asociar unrecurso DB2 con un programa, de forma que esta asociacion afecta a comopueden acceder otros programas al mismo recurso. Existen varios tipos:S (Share), U (Update), X (Exclusive), etc.

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

    RECUPERACION DE DATOS

    _____________________

  • 7/28/2019 Manual Del Usuario_DB2

    7/64

    Unidad de recuperacion______________________

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

    acciones que necesita ser completada para que cualquiera de las accio-nes individuales que la forman pueda considerarse como acabada.

    Ejemplo:

    Una transaccion que transfiere fondos de una cuenta A a otra B, deberaprimero sustraer la cantidad a transferir de la cuenta A, y luego sumara la cuenta B. Cuando se terminen ambas acciones, y no antes, los datosde ambas cuentas seran consistentes.

    Una unidad de recuperacion se seala como completa mediante un COMMIT oSynchronization (Sync) Point, de las siguientes formas:

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

    2. Explicitamente en puntos de la transaccion: EXEC CICS SYNCPOINT

    3. Implicitamente : EXEC DLI TERM

    4. Implicitamente en un programa BATCH-DLI : EXEC DLI CHKP

    Si ocurre una accion y otra no, se dice que la base de datos ha perdidosu integridad o consistencia. Para lograr que los datos recuperen elvalor que tenian antes de comenzar la unidad de recuperacion, se usa laopcion ROLLBACK para el comando SYNCPOINT.

    AYUDAS A LA PROGRAMACION________________________

    Spufi:_____ Permite usar el SQL sin tener que codificar un programa completo

    mediante instrucciones que pueden ser ejecutadas y mostradas enel terminal.

    Paneles para preparacion de programas:_____________________________________ Permiten la precompilacion, com-

    pilacion, link-edicion y binding de un programa. Solo se necesi-ta especificar el nombre del fichero que contiene las instruccio-nes fuente.

    Paneles para mantenimiento de planes:____________________________________ Con las opciones BIND, REBIND, y

    FREE. Permiten crear, cambiar o borrar el plan de cualquier pro-grama DB2.

    DCLGEN (Declarations Generator):_______________________________ Usa la informacion del catalogo DB2

    para:

  • 7/28/2019 Manual Del Usuario_DB2

    8/64

    . Crear definiciones de las estructuras de tablas o vistas,que van a ser guardadas en librerias de Copys para su pos-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 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 | +-----------+

  • 7/28/2019 Manual Del Usuario_DB2

    9/64

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

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

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

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

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

    . Examinar la validez de los nombres de columnas, tablas yvistas utilizados en el programa

    . Verificar que la persona esta autorizada a realizar lasoperaciones de acceso especificadas por las instruccionesSQL del programa

    . Seleccionar los caminos de acceso a los datos DB2 que elprograma quiere procesar

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

    - Isolation level:

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

    . CS el lock afecta a todas las filas a las que el programaesta accediendo actualmente

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

    . Para permitir a otras aplicaciones recuperar, pero no ac-tualizar, borrar o insertar filas se usa

    EXEC SQLLOCK TABLE nombre_de_tablaIN SHARE MODE

    END-EXEC

    7

    . Para impedir que otras aplicaciones accedan a la tabla de

  • 7/28/2019 Manual Del Usuario_DB2

    10/64

    cualquier forma se usa

    EXEC SQLLOCK TABLE nombre_de_tablaIN EXCLUSIVE MODE

    END-EXEC

    - Resource adquisition time

    . USE, por defectoindica que se quieren adquirir los locks cuando los espa-cios de tablas asociados sean accedidos por primera vez

    . ALLOCATEindica que se quieren adquirir los locks cuando se alocael plan de aplicacion

    - Resource release time

    . COMMIT, por defectoindica que se quieren liberar los locks en cada punto decommit

    . DEALLOCATEindica que se quieren retener los locks hasta que termineel programa

    - Explain pa h selection

    . YESse pide al DB2 informacion acerca de las decisiones queesta tomando en el establecimiento de caminos de accesoa los datos

    . NO

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

    INSTRUCCIONES S.Q.L.____________________

    INSTRUCCIONES BASICAS______________________

    Las instrucciones en lenguaje S.Q.L. (Structured Query Language) permi-ten comunicar peticiones de acceso a datos al DB2. Es usado por el ad-ministrador de la base de datos para crear y cambiar definiciones dedatos, por el administrador del sistema en cuanto a autorizaciones ausuarios de los datos, y por el programador de aplicaciones para recu-perar y actualizar datos.

    La primera clausula de una instruccion SQL dice al DB2 que operacion sequiere realizar.

  • 7/28/2019 Manual Del Usuario_DB2

    11/64

    Los nombres de variables van precedidos de ':'.

    CLAUSULA WHERE

    ______________

    Especifica una condicion de busqueda que, identificara la fila o filasque se quieren recuperar, borrar o actualizar. La condicion de busquedapuede estar formada por uno o varios predicados separados por AND y OR.

    El DB2 primero evalua las clausulas NOT, luego AND y por ultimo OR. Sepuede cambiar el orden de evaluacion por medio de parentesis, que sonexaminados 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 SQLSELECT nombres_de_las_columnas que nos interesanINTO nombres_de_vbles usadas para contener los datos recuperadosFROM nombre_de_la_tabla o vista que contiene los datosWHERE condicion_de_busqueda

    END-EXEC

    Se pueden especificar hasta 300 columnas en la clausula SELECT. Si sequieren recuperar todas las columnas, en el mismo orden en que aparecenen la fila, se pondra un asterisco, en lugar del nombre de las columnas.el valor de la primera columna especificada se guardara en la primeravariable especificada en la clausula INTO, el de la segunda en la se-gunda, etc.

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

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

    Si varias filas cumplieran la condicion, se usara una instruccion

  • 7/28/2019 Manual Del Usuario_DB2

    12/64

    DECLARE CURSOR para seleccionar las filas, seguida de una instruccionFETCH para mover los valores de las columnas a las variables una filacada vez.

    UPDATE______

    Funcion_______

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

    Formato

    _______

    EXEC SQLUPDATE nombre_de_la_tabla o vistaSET columnas que se quieren actualizar = nuevo valorWHERE condicion_de_busqueda

    END-EXEC

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

    DELETE______

    Funcion_______

    Quitar filas enteras de una tabla, no columnas especificas.

    Formato_______

    EXEC SQLDELETEFROM nombre_de_la_tabla o vistaWHERE condicion_de_busqueda

    END-EXEC

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

    INSERT______

  • 7/28/2019 Manual Del Usuario_DB2

    13/64

    Funcion_______

    Aadir nuevas filas a una tabla o vista, se puede:

    . Especificar los valores de las columnas que se quieren insertar. Incluir una instruccion SELECT en la INSERT para decir al DB2 quelos datos para la nueva fila estan contenidas en otra tabla o vista

    Formato_______

    EXEC SQLINSERTINTO nombre_de_la_tabla o vista (nombres de columnas)VALUES (valor_de_cada_columna especificada en la clausula INTO)

    END-EXEC

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

    Si se intenta insertar una fila que duplica otra existente en la tabla:. Si la tabla tiene un indice unico, la fila no es insertada, y elDB2 proporciona un SQLCODE -803

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

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

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

    INSERT INTO USERA.EMPTIME(EMPNUMBER, PROYNUMBER, STARTDATE, ENDDATE)

    SELECT EMPNO, PROYNO, COMIENZO, FINFROM DSN.EMP

    END-EXEC

    En una SELECT embebida en una INSERT no se puede poner UNION ni ORDER BY.

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

    FUNCIONES DEL CURSOR____________________

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

  • 7/28/2019 Manual Del Usuario_DB2

    14/64

    El DB2 construye una 'tabla de resultados' para guardar todas las filasrecuperadas al ejecutar una instruccion SELECT, y utiliza el cursor parahacerlas disponibles al programa. Un cursor identifica la fila actualde la tabla de resultados, que el programa puede recuperar secuencial-mente hasta que alcanza el fin de los datos ( SQLCODE=100, NOT FOUND).

    Un programa puede utilizar varios cursores, para cada uno de ellos seutilizan las siguientes instrucciones:

    DECLARE CURSOR______________

    Funcion_______

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

    accedidas con un cursor.

    Formato_______

    EXEC SQLDECLARE nombre_del_cursorCURSOR FOR SELECT columna 1, columna 2 .....FROM nombre_de_la_tablaWHERE columna 1 = condicion_de_busquedaFOR UPDATE OF columna 2 ...(columnas de cada fila que se

    quieren actualizar)END-EXEC

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

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

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

    SELECT DISTINCT columna 1, columna 2, .....

    OPEN____

    Funcion_______

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

    Formato

  • 7/28/2019 Manual Del Usuario_DB2

    15/64

    _______

    EXEC SQLOPEN nombre_del_cursor

    END-EXEC

    FETCH_____

    Funcion_______

    Mover a las variables del programa el contenido de la fila seleccionada.

    Formato

    _______

    EXEC SQLFETCH nombre_del_cursorINTO variable 1, variable 2 ....

    END-EXEC

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

    WHENEVER NOT FOUND__________________

    Funcion_______

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

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

    . Codificar la instruccion WHENEVER NOT FOUND bifurcando a otra partedel programa.

    Formato_______

    EXEC SQLWHENEVER NOT FOUND GO TO direccion_simbolica

    END-EXEC

    UPDATE______

  • 7/28/2019 Manual Del Usuario_DB2

    16/64

    Funcion_______

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

    Formato_______

    EXEC SQLUPDATE nombre_de_la_tablaSET columna 1 = valor , columna 2 = valor ....WHERE CURRENT OF nombre_del_cursor

    END-EXEC

    Cada columna que se quiere actualizar debe haber sido nombrada previa-mente en la clausula FOR UPDATE OF de la instruccion DECLARE CURSOR.La clausula WHERE identifica el cursor que apunta a la fila que va a

    ser actualizada. Despues de actualizar una fila, la posicion del cursorpermanece en esa fila hasta que se utilice una instruccion FETCH parala siguiente fila.

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

    DELETE______

    Funcion_______

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

    Formato_______

    EXEC SQLDELETE FROM nombre_de_la_tablaWHERE CURRENT OF nombre_del_cursor

    END-EXEC

    La clausula WHERE identifica el cursor que apunta a la fila que va a serborrada. Despues de borrar una fila, no se puede actualizar o borrar otrautilizando ese cursor, hasta que se de una FETCH para la siguiente fila.Con la instruccion DELETE se borran varias filas con una sola instru-ccion SQL, mientras que DELETE ... WHERE CURRENT OF, permite obteneruna copia de la fila, examinarla, y entonces, borrarla.

    CLOSE_____

    Funcion

  • 7/28/2019 Manual Del Usuario_DB2

    17/64

    _______

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

    Formato_______

    EXEC SQLCLOSE nombre_del_cursor

    END-EXEC

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

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

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

    EXEC SQL (valor actualDECLARE EMPLEADO CURSOR FOR del limiteSELECT EMPNO, SALARY mas bajo)FROM DSN.EMPLWHERE EMPNO > :UPD-EMPORDER BY EMPNO

    END-EXEC

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

    EXEC SQL : EXEC SQLOPEN EMPLEADO : FETCH EMPLEADO

    END-EXEC : INTO :UPD-EMP, :UPD-SAL: END-EXEC

    3. Borrar una fila

    EXEC SQLDELETE FROM DSN.EMPLWHERE EMNO = :UPD-EMP

    END-EXEC

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

    OPCIONES DE LA INSTRUCCION SELECT

    _________________________________

  • 7/28/2019 Manual Del Usuario_DB2

    18/64

    OPERACIONES ARITMETICAS_______________________

    La instruccion SELECT se puede usar para realizar operaciones aritmeti-cas con los datos antes de que sean proporcionados al programa. Esto seconsigue mediante operadores aritmeticos en la lista de columnas.

    SELECT JOBCODE + 10 . . .

    Los operadores aritmeticos se pueden usar con columnas de datos defini-dos como INTEGER, SMALLINT, DECIMAL, o FLOAT, con constantes numericas,y variables.

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

    FUNCIONES BUILT-IN__________________

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

    AVG___

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

    MAX___

    Maximo valor de una o mas columnas.

    MIN___

    Minimo valor de una o mas columnas.

    SUM___

    Suma del valor de una o mas columnas.

  • 7/28/2019 Manual Del Usuario_DB2

    19/64

    COUNT_____

    . Numero de filas que satisfacen la condicion de busqueda:

    EXEC SQLSELECT COUNT(*)INTO EMP-COUNTFROM DSN-EMPWHERE JOBCODE >= 50

    END-EXEC

    . Numero de valores unicos de una columna en particular:

    EXEC SQL

    SELECT COUNT (DISTINCT DEPTNO)INTO DST-COUNTFROM DSN-EMP

    END-EXEC

    CLAUSULAS GROUP BY, HAVING Y ORDER BY_____________________________________

    No se pueden especificar en una instruccion SELECT dentro de la DECLARECURSOR, cuando se pretenda actualizar una columna o borrar una fila.

    GROUP BY________

    Divide las filas que satisfacen la condicion de busqueda en grupos, se-gun una o mas columnas especificadas en esta clausula. El resultado dela aplicacion de una funcion BUILT-IN, no sera ya un valor unico, sinotantos valores como grupos. Si hay valores nulos en una columna especi-ficada en GROUP BY, el DB2 los considera en un grupo por separado.

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

    EXEC SQLDECLARE XYZ CURSOR FORSELECT WORKDEPT, AVG(SALARY)FROM DSN-EMPGROUP BY WORKDEPT

    END-EXEC.......................................EXEC SQL

    FETCH XYZINTO :WORK-DEPT, :AVG-SALARY

    END-EXEC

  • 7/28/2019 Manual Del Usuario_DB2

    20/64

    Es posible agrupar por mas de una columna.

    Ejemplo:

    Calculo del salario medio por departamento y por sexo. El resultadoseran dos filas por departamento (una por cada sexo), para las cuales

    se calculara el promedio.

    EXEC SQLDECLARE XYZ CURSOR FORSELECT WORKDEPT, SEX, AVG(SALARY)FROM DSN-EMPGROUP BY WORKDEPT, SEX

    END-EXEC.......................................EXEC SQL

    FETCH XYZ

    INTO :WORK-DEPT, :SEX, :AVG-SALARYEND-EXEC

    HAVING______

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

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

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

    EXEC SQLDECLARE XYZ CURSOR FORSELECT WORKDEPT, AVG(SALARY), MIN(EDUCLVL)FROM DSN-EMPWHERE SEX = 'F'GROUP BY WORKDEPTHAVING MIN(EDUCLVL) >= 16

    END-EXEC.......................................EXEC SQL

    FETCH XYZINTO :WORK-DEPT, :AVG-SALARY, :MIN-EDUC

    END-EXEC

    ORDER BY________

    Indica el orden en el que se quieren recuperar las filas, el cual seespecifica mediante el nombre de la columna o columnas, o un numero

  • 7/28/2019 Manual Del Usuario_DB2

    21/64

    (ORDER BY 3 especifica que se quiere ordenar por la tercera columnade la tabla de resultados) cuando en la SELECT no se ha especificadoun nombre de columna sino una expresion aritmetida, funcion BUILT-IN,etc.

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

    Por defecto se toma orden ascendente. Si se encuentran valores nulosson tratados como los mas altos. Los caracteres graficos se ordenanen secuencia EBCDIC.

    Se pueden especificar secuencias de orden secundarias.

    Ejemplo:

    Recuperar el nombre y numero de departamento de las mujeres empleadasordenado por numero de departamento descendente, y dentro de cada

    departamento por nombre de empleado.

    EXEC SQLDECLARE XYZ CURSOR FORSELECT EMPNAME, WORKDEPTFROM DSN-EMPWHERE SEX = 'F'ORDER BY WORKDEPT DESC, EMPNAME

    END-EXEC.......................................EXEC SQL

    FETCH XYZINTO :PGM-NAME, :WORK-DEPT

    END-EXEC

    UNION_____

    Permite combinar dos o mas instrucciones SELECT para formar una unicatabla de resultados, eliminando las filas duplicadas. Se usa para mez-clar valores de varias tablas, pero el conjunto de filas seleccionadasde una tabla es aadido al conjunto de filas seleccionado de otra.

    Los tipos de datos y longitudes de las columnas nombradas en la instru-ccion SELECT deben ser identicos. Por ejemplo, SELECT A, B UNION X, Yla 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 debenusar numeros, y nunca nombres de columnas.

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

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

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

  • 7/28/2019 Manual Del Usuario_DB2

    22/64

    Ejemplo:

    EXEC SQLDECLARE XYZ CURSOR FORSELECT EMPNO

    FROM DSN.EMP1WHERE WORKDEPT = :WORK-DEPTUNION

    SELECT DISTINCT EMPNOFROM DSN-EMP2WHERE PROJNO = :NUM-PROY

    END-EXEC.......................................EXEC SQL

    FETCH XYZINTO :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 unaparte de las columnas procedieran de una tabla, y otra parte de otra.Si coinciden los nombres de columna de dos tablas, habra que calificar-los, poniendo como prefijo el nombre de la tabla.

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

    Si no se especifica la clausula WHERE cada fila de la primera tabla esconcatenada a cada fila de la segunda tabla para formar una tabla deresultados, cuyo numero de filas sera el producto del numero de filasde cada tabla.

    Ejemplo:A=3 B=2 AB=6

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

    Ejemplo:

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

    EXEC SQLDECLARE XYZ CURSOR FOR

    SELECT EMP1.EMPNO, LASTNAME, ACTNUM, EMPTIMEFROM DSN.EMP1, DSN-EMP2

  • 7/28/2019 Manual Del Usuario_DB2

    23/64

    WHERE EMP1.EMPNO = EMP2.EMPNOEND-EXEC.......................................EXEC SQL

    FETCH XYZINTO :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 valor queeste comprendido entre los dos valores especificados.

    WHERE EDUCLVL BETWEEN 13 AND 16

    IN__

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

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

    LIKE____

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

    . Un '_' para cualquier caracter simple

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

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

    Ejemplo:

    . Para encontrar todos los empleados que viven en San Jose, debemos es-tar seguros de que San Jose no es parte del nombre de otra ciudad,

  • 7/28/2019 Manual Del Usuario_DB2

    24/64

    porque el DB2 nos devolveria tambien esa fila.

    WHERE TOWN LIKE '%SAN JOSE%'

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

    WHERE TOWN LIKE 'SAN%'

    IS NULL_______

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

    WHERE CODIGO IS NULL

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

    WHERE CODIGO = ' '

    VISTAS______

    CONCEPTO________

    Una vista no contiene datos. Es una definicion almacenada de un conjun-to de filas y columnas. Cuando un programa accede a los datos definidospor una vista, el DB2 procesa la definicion de la vista. El resultadoes un conjunto de filas a las que el programa puede acceder medianteinstrucciones SQL.

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

    Las funciones de una vista son:- Seguridad: No permitir el acceso de algunos usuarios a todos los

    datos de una tabla.

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

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

    - Resumir datos de una tabla y hacerlos disponibles:

  • 7/28/2019 Manual Del Usuario_DB2

    25/64

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

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

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

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

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

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

    No se puede crear un indice para una vista.

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

    SUBQUERY________

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

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

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

    1 funcion BUILT-IN o 1 expresion aritmetica.

  • 7/28/2019 Manual Del Usuario_DB2

    26/64

    Una SUBQUERY no puede contener una clausula ORDER BY.

    Cuando la instruccion de nivel superior es otra SELECT:

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

    . Se puede usar una SUBQUERY en una instruccion WHERE incluso si la

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

    Cuando la instruccion de nivel superior es UPDATE o DELETE la SUBQUERYno 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 SQLDECLARE XYZ CURSOR FORSELECT EMPNO, LASTNAME, JOBCODEFROM DSN.EMP1WHERE EDUCLEVEL >

    (SELECT AVG (EDUCLEVEL)FROM DSN.EMP2

    END-EXEC

    25

    .......................................

    EXEC SQLFETCH XYZINTO :EMP-NUMBER, :NAME, :CODE

    END-EXEC

    2) Despues de un operador de comparacion seguido de:________________________________________________

    . ALL, para indicar que el valor proporcionado debe ser comparado deuna determinada forma con todos los valores que devuelva la SUBQUE-RY.

    Ej: WHERE EXPRESION > ALL SUBQUERY

    para satisfacer la WHERE, el valor de la expresion debeser mayor que todos los valores devueltos por la SUBQUERY.

    Si la SUBQUERY no selecciona ningun valor la condicion essatisfecha.

  • 7/28/2019 Manual Del Usuario_DB2

    27/64

    . ANY, para indicar que el valor proporcionado debe ser comparado deuna determinada forma con cualquiera de los valores que devuelvala SUBQUERY.

    Ej: WHERE EXPRESION > ANY SUBQUERY

    3) Despues de IN, para indicar que el valor de la expresion debe estarentre los valores devueltos por la SUBQUERY.

    Ejemplo:

    EXEC SQLDECLARE XYZ CURSOR FORSELECT EMPNO, LASTNAME, JOBCODEFROM DSN.EMP1WHERE EMPNO IN

    (SELECT DISTINCT EMPNOFROM DSN.EMP2WHERE PROYNO = 'M1')

    END-EXEC.......................................EXEC SQL

    FETCH XYZINTO :EMP-NUMBER, :NAME, :CODE

    END-EXEC

    4) Despues de EXISTS para verificar que al menos puede ser encontradauna fila que cumpla la condicion de la SUBQUERY.

    Ejemplo:

    WHERE EXISTS SUBQUERY

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

    SUBQUERY CORRELATIVA____________________

    En una SUBQUERY normal, el DB2 ejecuta la SUBQUERY una vez, sustituyeel resultado en la parte derecha de la condicion de busqueda, y evaluala SELECT de nivel superior segun el valor de la condicion de busqueda.

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

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

    Es igual que una normal excepto porque despues de especificar el nombrede la tabla en la clausula FROM, proporcionamos un nombre de correla-cion, variable que representa la fila actual. Para especificar la corre-

    lacion se prefija el nombre de columna con un nombre de correlacion.

  • 7/28/2019 Manual Del Usuario_DB2

    28/64

    OTROS EJEMPLOS______________

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

    En una INSERT, ni la SUBQUERY ni la SELECT de nivel superior dentrode la INSERT, pueden basarse en la misma tabla en la que se inserta.

    . Con una SELECT______________

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

    EXEC SQLDECLARE XYZ CURSOR FORSELECT EMPNO, LASTNAME, WORKDEPT, JOBCODEFROM DSN.EMP ESTAFILAWHERE JOBCODE >

    (SELECT AVG (JOBCODE)FROM DSN.EMPWHERE WORKDEPT = ESTAFILA.WORKDEPT)

    END-EXEC.......................................EXEC SQL

    FETCH XYZINTO :EMP-NUMBER, :NAME, :DEPT, :CODE

    END-EXEC

    . Con una UPDATE______________

    EXEC SQLUPDATE DSN.EMP1 ESTAFILASET DATE = 9999WHERE 840901 >

    (SELECT MAX (ENDATE)FROM DSN.EMP2WHERE PROJNO = ESTAFILA.PROJNO)

    END-EXEC

    . Con una DELETE______________

    EXEC SQLDELETE FROM DSN.EMP1 ESTAFILAWHERE NON EXISTS

    (SELECT *

    FROM DSN.EMP2WHERE PROJNO = ESTAFILA.PROJNO)

  • 7/28/2019 Manual Del Usuario_DB2

    29/64

    END-EXEC

    SPUFI_____

    SPUFI (SQL PROCESSOR USING FILE INPUT) permite:

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

    - Creacion de una tabla_____________________

    CREATE TABLE TEMPL(EMPNO CHAR(6) NOT NULL,WORKDEPT CHAR(3) NOT NULL,

    JOBCODE DECIMAL(3) )IN TESTTAB.DSN77EMP;

    - Creacion de una vista_____________________

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

    CREATE VIEW EMPDATA ASSELECT *FROM DSN.EMPWHERE 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 instruccionesSQL que se quieren ejecutar, cuya longitud de registro sera de 80

    . Especificar un fichero de salida_________________________________, que recoge cada instruccion yel resultado de la ejecucion, que seran los datos recuperados en

    una SELECT, o un SQLCODE en otras. Tambien incluye estadisticas.

  • 7/28/2019 Manual Del Usuario_DB2

    30/64

    . Especificar las opciones de proceso___________________________________ (YES por defecto)

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

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

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

    - 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 basede datos leidos o cambiados por SPUFI no pueden ser cam-biados por otro programa hasta que SPUFI alcance un pun-to de COMMIT.

    CS (CURSOR STABILITY), garantiza que ningun programa puedemodificar los datos de una fila en la cual SPUFI tieneposicionado un cursor. Esto proporciona maxima concu-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.

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

  • 7/28/2019 Manual Del Usuario_DB2

    31/64

    - COLUMN HEADING: Por defecto NAMES.NAMESLABELSANYBOTH

    3) PANEL COMMIT/ROLLBACK_____________________

    Si en el panel principal se especifica NO para AUTOCOMMIT, una vezque se completa la ejecucion se displaya este panel, en el que seindicara 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 OPENDECLARE FETCH PREPAREDESCRIBE INCLUDE WHENEVER

    Las opciones no soportadas por spufi son:. INTO en la SELECT. WHERE CURRENT en la UPDATE y DELETE

    CODIFICACION DE INSTRUCCIONES SQL EN UN PROGRAMA COBOL______________________________________________________

    1) Definir un area de comunicacion llamada SQLCA

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

    WORKING-STORAGE SECTIONEXEC SQL

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

  • 7/28/2019 Manual Del Usuario_DB2

    32/64

    05 SQLERRP PIC X(8).05 SQLERRD OCCURS 6 TIMES PIC S9(9) COMP.05 SQLWARN.

    10 SQLWARN0 PIC X(1).10 SQLWARN1 PIC X(1).10 SQLWARN2 PIC X(1).

    10 SQLWARN3 PIC X(1).10 SQLWARN4 PIC X(1).10 SQLWARN5 PIC X(1).10 SQLWARN6 PIC X(1).10 SQLWARN7 PIC X(1).

    05 SQLEXT PIC X(8).

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

    Esto puede hacerse de dos formas:

    . Codificando una instruccion DECLARE en la data division, especifi-cando nombre de la tabla y listando cada columna y su tipo de dato.

    EXEC SQLDECLARE DSN.TDEPT TABLE(DEPNUM CHAR(3) NOT NULL,DEPNOM VARCHAR(36) NOT NULL)

    END-EXEC

    . Previamente a la precompilacion con el DCLGEN.Para incluir en el programa las declaraciones producidas por DCLGEN

    EXEC SQLINCLUDE 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, ninombres de entradas externas o de plan que comiencen por DSN, yaque estan reservados para el DB2.

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

    VARIABLES Y ESTRUCTURAS HOST

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

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

  • 7/28/2019 Manual Del Usuario_DB2

    33/64

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

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

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

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

    . Campo de longitud PIC S9(4) COMP.

    . Campo de valor PIC X(80). (Como maximo).

    VARIABLES INDICADOR

    Una variable indicador es un entero de media palabra.

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

    Ejemplo:

    EXEC SQLSELECT TELFNUMINTO :TELEF:INDNULLFROM DSN.TABEMPLWHERE EMPNO = :EMPID

    END-EXEC

    Se usa para:

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

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

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

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

    . Colocar un valor nulo en una columna

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

  • 7/28/2019 Manual Del Usuario_DB2

    34/64

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

    SQLCAID

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

    SQLCABC

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

    SQLCODE

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

    -n ha ocurrido un error

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

    +100 no existen datos para procesar

    SQLERRM

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

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

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

    SQLWARN1

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

    SQLWARN2

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

    SQLWARN3

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

    SQLWARN4

  • 7/28/2019 Manual Del Usuario_DB2

    35/64

    Si es W una UPDATE o DELETE dinamica no incluye una clausula WHERE.

    5) MANEJO DE CONDICIONES EXCEPCIONALES: INSTRUCCION WHENEVER

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

    EXEC SQLWHENEVER CONDICION ACCION

    END-EXEC

    Se pueden especificar tres condiciones:

    . SQLWARNING indica que se quiere hacer cuando SQLWARN0 = W o SQLCODEcontiene un valor positivo distinto de 100.

    . SQLERROR indica que se quiere hacer cuando SQLCODE < 0

    . NOT FOUND indica que se quiere hacer cuando el DB2 no puede encon-trar una fila que satisfaga la instruccion SQL o cuando no hay masfilas 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

  • 7/28/2019 Manual Del Usuario_DB2

    36/64

    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 satisfaganlas condiciones de busqueda el DB2 nos devuelve un SQLCODE = 100en la primera FETCH que se haga.

    - SELECT SUM(COLUMNA) EN COBOL:

    Si no se efectuo la suma -no existen filas para las condiciones debusqueda- el valor que se devuelve en el campo resultado de lasuma sera nulos y en determinados casos se produce un SQL = -305.

    Conclusion: Preveerlo en cobol utilizando indicador variableque devolvera valor negativo si el campo al que estaasociado contien valores nulos.

    NOTA: En CSP el campo que recoge la suma queda a cerosy 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-AEXEC SQL

    SELECT DISTINCT CVANORAA, CVANCTAAINTO :CVANORAA-A, :CVANCTAA-AFROM FVAORALVWHERE CVANORAA = :CVANORAA-A

    END-EXEC.

    COUNT

    *----------------------------------------------------------------**CUENTA EL NUMERO DE DOMICILIACIONES DE UNA ENTIDAD EMISORA **----------------------------------------------------------------*

    CUENTA-DOMICILI.

  • 7/28/2019 Manual Del Usuario_DB2

    37/64

    EXEC SQLSELECT

    COUNT (*)INTO :CDOIMPOP-MFROM FDOMAESVWHERE 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 SQLSELECT SUM(CVANTITP)

    INTO :CVANTITP-C :IND-NULLFROM FVAORBCVWHERE CVAENTIA = :WS-ENTI-DEPOS-1234 AND

    CVACLTEA = :CVACLTEA-C ANDCVAPIVAA = :CVAPIVAA-C ANDCVAOBSTA = '03' ANDCVATIOPA = '5'

    END-EXEC.

    IF SQLCODE = NOENCONTRADO OR IND-NULL < 0THEN . . .

    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 SQLDECLARE CURSOR1 CURSOR FOR

    SELECTD.CVACLICA, SUM(CVAUNUMP - CVAPNUMP + 1)

    FROMFVACARTV D

    WHERE(D.CVAENTIA = :W-ENTIDAD ANDD.CVACLANA >= :WS-CVACLA00 AND

    D.CVACLANA

  • 7/28/2019 Manual Del Usuario_DB2

    38/64

    D.CVACLANA >= :WS-CVACLA40 ANDD.CVACLANA = :WS-CVACLA00 ANDP.CVACLANA = :WS-CVACLA40 ANDP.CVACLANA =13 AND CAMPO 1

  • 7/28/2019 Manual Del Usuario_DB2

    39/64

    (AVG)

    EXEC SQLDECLARE XMP1 CURSOR FOR

    SELECT DEPARTAMENTO, SEXO, AVG(SALARIO)

    FROM TABLA1GROUP BY DEPARTAMENTO, SEXOEND-EXEC.

    EXEC SQLFETCH XMP1INTO :CAMPO1, :CAMPO2, CAMPO3

    END-EXEC.

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

    (MAX)

    EXEC SQLSELECT MAX(SALARIO)

    INTO :CAMPO1FROM TABLA1WHERE DEPARTAMENTO = 'AX21'

    END-EXEC.

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

    EXEC SQLSELECT MIN(SALARIO)

    INTO :CAMPO1FROM TABLA1WHERE DEPARTAMENTO = 'AX21'

    END-EXEC.

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

    EXEC SQLDECLARE XMP1 CURSOR FOR

    SELECT DEPARTAMENTO, AVG(SALARIO), MIN(EDLI)FROM TABLA1WHERE SEXO = 'V'

    GROUP BY DEPARTAMENTOHAVING MIN(EDLI) >= 16

    END-EXEC.

    EXEC SQLFETCH XMP1

    INTO :CAMPO1, :CAMPO2, CAMPO3END-EXEC.

  • 7/28/2019 Manual Del Usuario_DB2

    40/64

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

    RECOMENDACIONES PARA EL DISEO DE APLICACIONES EN DB2_____________________________________________________

    WLM.-IBM

    Son varias las funciones involucradas en laimplementacion de una aplicacion en DB2, debiendo tener encuenta el que una misma persona puede realizar mas de unafuncion.

    Las principales funciones que sera necesariodesarrollar

    son:

    ADMINISTRACION DE DATOS

    Las tareas a desarrollar consisten en, sobre la base detener una vision corporativa de los datos, desarrollarmodelos logicos y mantener diccionario de datos, ademas de :

    * Establecer convenciones para la denominacion de lasentidades de datos, las relaciones entre datos y losatributos importantes.

    * Definir reglas de integridad de datos.

    * Desarrollar vistas de usuario.

    * Soporte al Administrador de base de datos y a losanalistas de aplicaciones.

    * Participar en las sesiones de diseo de base de datos.

    ADMINISTRACION DE BASE DE DATOS

    Es responsabilidad de esta funcion el diseo y creacionde objetos DB2, tales como tablas, vistas e indices,incluyendo ademas:

    * Diseo de modelos fisicos de datos.

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

    * Definicion y creacion de objetos DB2.

    * Asistir a los analistas de aplicaciones en los prototipos

    funcionales.

  • 7/28/2019 Manual Del Usuario_DB2

    41/64

    * Desarrollar modelos de JCl para utilitis.

    * Recomendaciones de procedimiento de backup/recovery paralas tablas de aplicacion.

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

    * Participar en las revisiones de diseo de aplicaciones.

    * Dar soporte tecnico a miembros del equipo de desarrollo.

    ADMINISTRACION DEL SISTEMA DB2

    Es responsabilidad de esta funcion el controlar el

    subsistema DB2. Normalmente esta funcion no existe alinicio, y entonces es compartida por el Administrador de laBase de Datos y el Programador del Sistema. Lasresponsabilidades que incluye son:

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

    * Definir las opciones iniciales de instalacion.

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

    * Suministrar informacion a la funcion de planificacion decapacidad.

    * Establecer directrices de backup y recuperacion.

    * Controlar y perfeccionar el funcionamiento del subsistemaDB2.

    * Participar en las revisiones de diseo.

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

    * Establecer directrices para el uso de las funciones deseguridad del subsistema DB2 y coordinar su uso con lafuncion de seguridad de la organizacion de administracion.

    PROGRAMADOR DEL SISTEMA DB2

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

    * Instalacion de los productos prerrequisito.

    * Instalacion de DB2 y otros productos relacionados.

  • 7/28/2019 Manual Del Usuario_DB2

    42/64

    * Implementar procedimientos para la determinacion deproblemas.

    * Aplicar mantenimiento de sw.

    * Ejecutar las herramientas de medicion de rendimiento y

    control, suministrando la informacion a las funciones deADMINISTRACION DEL SUBSISTEMA DB2 Y DE PLANIFICACION DECAPACIDAD.

    * Implementar procedimiento de backup y recovery.

    * Suministrar autorizacion inicial.

    * Desarrollar procedimientos de operacion y entrenamiento deoperadores.

    OPERACION DEL SYSTEMA DB2

    Esta responsabilidad incluye:

    * Arrancar, parar y controlar el subsistema DB2.

    * Controlar los mensajes del DB2 y tomar las accionespertientes.

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

    ANALISIS DE APLICACIONES________________________

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

    * Definicion de los requerimientos de la aplicacion.

    * Definicion de las relaciones entre datos y modelos usados

    * Desarrollo del diseo logico de la aplicacion.

    * Definir las especificaciones de los programas.

    * Coordinar las revisiones del diseo.

    * Coordinar las pruebas integradas de programas.

    PROGRAMACION DE APLICACIONES

    Esta funcion es responsable del desarrollo de programase incluye:

  • 7/28/2019 Manual Del Usuario_DB2

    43/64

    * Codificar y probar programas.

    * Implementar las reglas de integridad de datos.

    * Codificar rutinas comunes, tales como rutinas de salida,

    codigos de retorno del SQL,puntos de control logicos,etc.

    * Creacion y carga de datos de prueba en tablas.

    * Participar en las revisiones del diseo y planificacion depruebas.

    * Desarrollar procedimientos de backup y recuperacion para laaplicacion.

    SOPORTE DE CENTRO DE INFORMACION

    El requerimiento de esta funcion surgira si se van autilizar herramientas orientadas a usuarios finales, talescomo QMF o AS. Las responsabilidades que incluye estafuncion son:

    * Aadir nuevos usuarios y mantener sus profiles.

    * Soporte de consultas a usuarios finales.

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

    * Controlar el uso de disco por los usuarios finales.

    * Desarrollo de consultas comunes y complejas.

    REPRESENTANTES DE LOS USUARIOS______________________________

    Las responsabilidades iniciales de los usuarios son:

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

    * Definicion de las reglas de integridad.

    * Definicion de los objetivos de seguridad, disponibilidad yrendimiento.

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

    En una fase inicial, las funciones de ADMINISTRACION DE

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

  • 7/28/2019 Manual Del Usuario_DB2

    44/64

    Igualmente que en el caso anterior, las funcioones dePROGRAMACION DEL SISTEMA DB2 y ADMINISTRACION DEL SISTEMADB2, pueden ser tambien asumidas por una sola persona.

    MACRO ACTIVIDADES A DESARROLLAR EN UN PROYECTO______________________________________________

    |Gestion de Proyecto.PLANIFICACION|Seleccionar la aplicacion piloto.

    |Definicion de estandares.|Identificar los recursos a proteger.

    |Definir el entorno de software.|Verificar requerimientos hw.

    HW/SW INSTAL.|Verificar requerimiento sw.|Determinar las opciones de instal. del DB2|Instalar DB2.

    |Preparacion del entorno.|Desarrollar rutinas y proc. comunes.

    DISEO Y |Analisis de la aplicacion.DESARROLLO |Diseo de Bases de Datos.APLICACION |Desarrollo de programas y prueba.

    |Paso de desarrollo a produccion.

    |Procedimientos de arranque y parada.|Definir procedim. Backup y Recovery.

    OPERACION Y |Preparar procedim. de control.RECUPERACION |Desarrollar proced. recovery y backup sis.

    |Desarrollar proced. backup y recovery de| aplicaciones.

    |Estrategia de desarrollo.GESTION RDTO |Definir entorno de herramientas.

    |Analizar y refinar.|

    De la lista de actividades expuesta, como se observaexisten algunas que solo es necesario realizarlas una vez,otras que habra que realizarlas ciclicamente y finalmenteaquellas que son propias de cada aplicacion a desarrollar.

    Del conjunto de funciones expuestas, sera necesarioasignarlas a personas que formen parte del Proyecto y que almenos seran:

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

    * Dos analistas de aplicaciones, uno actuando como lider del

    proyecto.

  • 7/28/2019 Manual Del Usuario_DB2

    45/64

    * Dos o mas programadores de aplicaciones.

    * Una persona, con el papel de Programador del Sistema yAdministrador de Datos del Sistema.

    PLANIFICACION._______________

    1.-Gestion del Proyecto.

    Consistira en el desarrollo de la planificacion delProyecto , definiendo la duracion de cada una de lastareas y la dedicacion a ellas de los recursos del equipo,que en algunos casos no sera del 100%.

    I5 Planificacion de la formacion y entrenamiento de los

    diferentes miembros del equipo.

    2.-Seleccion de la aplicacion piloto.

    En la que participaran el administrador de la base dedatos y analista de aplicaciones.

    Debera ser una aplicacion de bajo riesgo, que tenga unamplio espectro de aplicacion de herramientas, comosimulacion completa y no compleja ademas de facil dedemostrar a los usuarios finales.

    3.-Definicion de Estandares.

    Participaran en administrador de base de datos, eladministrador de datos, el programador del sistema y elanalista de la aplicacion.

    Su actividad consistira en :

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

    b) Directrices para el diseo de tablas y de laaplicacion.

    c) Directrices para la programacion de la aplicacion.

    d) Directrices de documentacion.

    e) Procedimientos especificos de instalacion.

    4.-Identificar los recursos a proteger.

    Definir un entorno de acceso limitado de datos y deautorizaciones y responder a los requerimientos de auditoria.

    Ser responsable el administrador del sistema, y aquelpersonal que tenga la responsabilidad de mantener el entorno

  • 7/28/2019 Manual Del Usuario_DB2

    46/64

    de seguridad. Ademas participarna el administrador de basesde 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.

    DISEO Y DESARROLLO DE LA APLICACION____________________________________

    1.-Establecer el entorno de desarrollo de la aplicacion.

    Consistira en preparar el entorno de trabajo delprogramador de aplicaciones, en cuya actividad participara eladministrador del sistema y el administrador de bases dedatos.

    El entorno de trabajo estara integrado por librerias,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 unametodologia por parte de los analistas de aplicaciones,para las tareas de:

    * Definicion de requerimientos.

    * Diseo externo.

    * Modelo logico de datos.

    * Diseo interno.

    Actividades importantes, integradas en las sealadas,son:

    - ANALISIS DE DATOS.

    - DESARROLLAR PROTOTIPOS FUNCIONALES ( QMF, CSP, SQL ).

    - DIRECTRICES PARA EL DISEO DE APLICACIONES.

    3.-Diseo de Base de Datos.

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

    4.-Desarrollo y prueba de programas.

  • 7/28/2019 Manual Del Usuario_DB2

    47/64

    Consistira basicamente en la codificacion y prueba delos programas de la aplicacion, el responsable directo serel programador de aplicaciones y tambien participara elanalista de aplicaciones el el administrador de base dedatos.

    Las tareas a realizar son:

    * Crear datos de prueba.

    * probar las llamadas SQL.

    * Desarrollar los programas.

    * Prueba unitaria.

    * prueba integrada.

    5.-Paso de Desarrollo a Produccion.

    El responsable ser el lider del projecto y participaratodo el equipo en esta actividad, cyuas tareas masimportantes 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 deproblemas.

    * 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 usanlos caminos esperados.

    * Establecer procedimientos de contabilidad.

    El DB2 suministra rutinas de servicio llamadas"attachement facilities" que conectan el programa deaplicacion al DB2 para permitir usar sus servicios. El

    comando DSN y sus interfases asociadas, DSNELI (para TSO oBatch ), DSNCLI ( para CICS ) , son las facilidades standard

  • 7/28/2019 Manual Del Usuario_DB2

    48/64

    de conexion al DB2.

    Por tanto cualquier programa de aplicacion estotalmente dependiente de la conexion al DB2. Por ejemplo,no se pueden cambiar los nombres de planes, antes definalizar la aplicacion. Si el DB2 termina, tambien

    terminar la aplicacion.

    DISEO DE BASES DE DATOS________________________

    INTRODUCCION.-______________

    En el proceso de diseo de bases de datos, deber a haberuna primera fase de diseo en la que se definiese la

    "Arquitectura de datos" o "Modelo de datos corporativo", querepresente de forma general a la entidad, sin entrar endetalles, simplemente a nivel de U Grupos de Datos y lasRelaciones entre estos U ( un empleado, un departamento, uncliente, un prestamo, etc.), lo cual supondra el inicio deldiseo del Sistema de Informacion de la entidad.

    Una vez cubierta la fase anterior, se iniciara elproceso de analisis de cada una de las aplicaciones osubsistemas definidos en el Sistema de Informacion, y porconsiguiente al "analisis de los datos" propios de laaplicacion, definiendo entonces el contenido de pantallas,informes y otros ficheros que requiera el usuario.

    DISEO LOGICO DE BASES DE DATOS_______________________________

    A)ANALISIS DE DATOS.____________________

    1)Establecer normas de denominacion de los datos paraevitar sinonimos(elementos con diferente nombre y mismosignificado) y homonimos (elementos con el mismo nombre ydiferente significado).

    2)Durante la elaboracion del modelo de datos, nuevasU entidades U se crearan siempre que dos entidades seU relacionen U en una forma varios a varios.

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

    En esta fase se definiran tambien los atributos de lasrelaciones y de las entidades. En consecuencia los

  • 7/28/2019 Manual Del Usuario_DB2

    49/64

    diferentes items de datos que integran una entidad ymediante que claves y tipos de las mismas estableceremoslas relaciones entre las diferentes entidades.

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

    implica camino de acceso o secuencia.

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

    Las Foreign Keys son las llamadas "claves ajenas", es decircolumna(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 ordenfisico de las filas de una tabla.

    B)NORMALIZACION_______________

    Una vez realizado el analisis de datos, se procedera anormalizar las entidades (tablas) en tercera forma normal.

    1)Primera forma normal. Consiste en la eliminacion de loscampos repetitivos mediante la creacion de una nuevaentidad. La cual incluye una Foreign Key en la nuevaentidad, para asi poder realizar JOIN con las dosentidades.

    La importancia de esta normalizacion, viene dadafundamentalmente por la eliminacion de campos repetidos quedara lugar a un no deseado mantenimiento de los camposimplicados.

    2)Segunda forma normal. Consiste en determinar que datoselementales son dependientes de campos de clave noprimaria. Una nueva entidad se creara con estos campos,incluyendo tambien una foreign key en la nueva entidad,para asi poder hacer join con las dos.

    3)Tercera forma normal. Consiste en determinar que datoselementales son dependientes de solamente una parte de laclave primaria. Una nueva entidad se creara con estoscampos, incluyendo una foreign key en la nueva entidad,para asi poder hacer join con las dos entidades.

    La importancia de la normalizacion en segunda y terceraforma normal, consiste en evitar anomalias de actualizacion( en especial en lo que se refiere a la integridad dedatos, tal como borrado desintencionado de registros ). Si

    una tabla contiene campos no dependientes de la claveprimaria completa, entonces podran darse anomalias en la

  • 7/28/2019 Manual Del Usuario_DB2

    50/64

    actualizacion.

    C)INTEGRIDAD REFERENCIAL________________________

    La integridad referencial puede ser definida como:

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

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

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

    NOTA: En la version 2 del DB2, la integridad referencial esuna funcion del DB2, la cual asegura la validacion de lasrelaciones entre una y otra tabla. Se pueden definircriterios referenciales, por ejemplo el que un empleado nopueda ser dado de alta en una departamento si este noexiste. Tambien que una fila de una tabla de departamentosno puede ser borrada, mientras existan empleados asignadosa ese departamento, etc.

    INTEGRIDAD DE DATOS:_____________________

    1.-UN ADECUADO DISEO DE BASE DE DATOS._______________________________________

    * ANALISIS TOTAL DE LOS DATOS.

    Todos los campos que son necesarios y no derivables, sealmacenaran en una tabla.

    * NORMALIZACION DE LOS DATOS, PARA EVITAR:

    Restricciones artificiales en la aplicacion.Almacenamiento redundante de datos. (excepto paraForeign Keys).

    Cualquier posible anomalia en la actualizacion.

    2.-UN ADECUADO DISEO DE MODULOS, CODIFICACION Y PRUEBAS._________________________________________________________

    * Implementar las reglas de integridad referencialdefinidas al disear las bases de datos.

  • 7/28/2019 Manual Del Usuario_DB2

    51/64

    * Definir e implementar las unidades logicas detrabajo.(LUW)

    Para en cada una de ellas poder establecer los puntosde Commit en los programas batch o de Sync en los

    interactivos.

    Esto es un aspecto importante en cuanto a integridad yrendimiento.

    -Una orientacion en programas interactivos puede ser:Disear la aplicacion de tal modo que una LUW secorresponda con cada pantalla que se visualiza.

    Siempre que haya un CICS RETURN supone un Syncimplicito.

    Evitar cancelaciones, de tal forma que cualquier codigo

    de retorno imprevisto, suponga un rollback y mensajes alusuario, ademas de escribir la SQLCA en un fichero deerrores.

    Una LUW se corresponde con el uso de un thread, cuyotiempo debe minimizarse, por cuanto supone asignarrecursos ( plan, DBD's, espacio de tablas, indices );por ello el thread debe procurar liberarse cuando sedialoga con el terminal. Debe tambien recordarse que elRollback actua desde el ultimo commit o sync.

    -Una orientacion en programas batch puede ser:

    En programas de significada actividad de actualizacionser necesario usar Commit y prever restauracion logica.

    Las Commit deberan hacerse cada cierto numero de LUW, enbase a cuantos bloqueos puede tener el IRLM ( esto esaplicable a bloqueos de paginas o tambien cada 10 o 15minutos.

    No olvidar que todo programa batch que realice Commitperiodicos debe tener restauracion logica o debe podervolver a ser ejecutado sin afectar a la integridad delos datos.

    RENDIMIENTO Y CONCURRENCIA EN BASE DE DATOS___________________________________________

    ALGUNOS DE LOS FACTORES CLAVES SON :____________________________________

    A)CONCURRENCIA.______________

  • 7/28/2019 Manual Del Usuario_DB2

    52/64

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

    * Pueden producirse fallos del SQL debido a que sesobrepasa el numero de bloqueos concurrentes del IRLM odebido 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 sonleidas y/o escritas por el DB2,lo cual es funcion del plande acceso y la cardinalidad de las columnas.

    -Informacion sobre la cardinalidad de las columnas estadisponible en el Catalogo del DB2 ( en

    SYSIBM.SYSCOLUMNS.COLCARD), para columnas que son laprimera de un indice. Informacion sobre la cardinalidadde indices completos tambien esta disponible en elCatalogo del DB2 (tabla SYSIBM.SYSINDEXES, columnasFIRSTKEYCARD Y FULLKEYCARD.

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

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

    Secuencia de acciones dentro de un query-block.Si se esta usando un indice. (se suministra el nombre)

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

    Si hay bloqueo a nivel de pagina o espacio de tabla.(TSLOCKMODE). Cuando es igual a X o S reducira laconcurrencia.

    Si se hace clasificacion y porque. (hay ocho columnasde indicador de sort).

    * LOS SIGUIENTES ASPECTOS AFECTAN A LA ELECCION DE UN PLANDE 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, latablas y los indices, incluyendo:

  • 7/28/2019 Manual Del Usuario_DB2

    53/64

    -Tamao de la tabla.

    -Cardinalidad de los indices.Indices con pocos valoresdistintos son menos usados por el DB2.

    -Como esta organizado el espacio detablas.(clustered?).

    -Como estan organizados los indices,

    -Cual es el nivel de actualidad de las estadisticasrespecto al estado actual de los datos(RUNSTATS).

    * DEFINIR SOLAMENTE LOS INDICES IDONEOS (UTILES), LOS EXTRADEGRADAN PROGRAMAS DE USUARIO Y DE UTILIDAD.

    * TABLAS E INDICES BIEN ORGANIZADOS REDUCEN I/Os.

    El catalogo del DB2 nos informa de este nivel deorganizacion.

    * IMPRESCINDIBLE EL USO DE PROTOTIPOS.

    DISEO FISICO DE BASES DE DATOS________________________________

    A continuacion vamos a ofrecer una serie de recomendacionesen la definicion de los diferentes objetos del DB2: Gruposde almacenamiento, Bases de datos, Espacios de tablas,Tablas, Indices y Vistas.

    1)Si las tablas usan muy frecuentemente el JOIN, habra queconsiderar la posibilidad de desnormalizar las tablas,almacenando los datos duplicados para evitar la necesidaddel JOIN.

    Habra que analizar el equilibrio entre el incremento delcoste del JOIN y el incremento del coste de mantenimientode datos duplicados.

    2)Aconsejar el uso de NOT NULL en las columnas, a no serque exista requerimiento por parte de la aplicacion. Cadacolumna nula afecta negativamente al rendimiento y requiereun byte extra por fila y ademas complican la logica delprograma, que debe verificar las nulas,

    3)Colocar las columnas VARCHAR al final de la tabla. Estetipo de columnas solo se definiran, cuando la variabilidaddel tamao sea significativo, unos 20 bytes de media.

    4)El usar ficheros Vsam definidos por el usuario, en lugarde la definicion de grupos de almacenamiento, da mayor

    flexibilidad en la operacion. Permitiendonos incrementarespacios de tablas o indices y/o mover un fichero DB2 sin

  • 7/28/2019 Manual Del Usuario_DB2

    54/64

    tener que hacer descarga, borrado, y carga de la tabla.se podra usar el REORG con UNLOAD o DSN1COPY para cambiarde lugar ficheros DB2).

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

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

    6)Asignar un prefijo a los objetos DB2 por cada aplicacion,para facilitar las consultas al catalogo del DB2.

    7)Se aconseja una tabla por espacio de tablas.

    8)Usar LOCKSIZE TABLESPACE:

    Cuando una tabla es accedida en modo de solo lectura.Cuando un solo usuario la actualiza. (ej. programabatch).

    Recordar que este atributo se puede modificar antes ydespues de ejecutar un programa mediante el bind. Otrasolucion sera codificar LOCK TABLE en el programa.

    En este caso tambien es aconsejable usar SUBPAGES = 1 enlos indices.

    9)Usar LOCKSIZE ANY cuando se ha decidido bloqueo de pagina.En este caso el DB2 actua de la siguiente manera:

    * En el momento del BIND el DB2 elige normalmente bloqueode pagina, a excepcion de que ISOLATION = rr y scan de latabla se realize.

    * Durante la ejecucion el DB2 escalara el bloque a nivel detabla si, y solamente si, el numero de paginas actualmentebloqueadas en la tabla exceda al numero especificado comolimite en NUMLKTS.

    En este caso subpages debe ser > 1 , en base al nivel deactividad y al tamao de la tabla.

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

    11)Todos los accesos a los datos deben de realizarse siemprea traves de VISTAS, nunca a traves de las tablas base.Incluso en el supuesto de que la VISTA sea igual a la tabla.Tambien conviene definir sinonimos para cada vista, de talforma que los accesos sean independientes del creador de latabla o vista.Otras ventajas son:

    * Incrementa la flexibilidad de la autorizacion : Losusuarios de la vista tendran acceso solamente a las columnas

    de la vista.

  • 7/28/2019 Manual Del Usuario_DB2