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.

 

 

      ________________________________________________________________

      ________________________________________________________________