Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Manual DB2-SQL.:1
INDICE
1. INTRODUCCIN.........................................................................................4
2. SQL EN PROGRAMAS DE APLICACIN...............................................................5
2.1. DB2 EMBEBIDO. REA DE COMUNICACIONES SQLCA.............................................................................5
2.2. DECLARACIONES EN WORKING-STORAGE SECTION..............................................................................6
2.2.1. DEFINICIONES DE CAMPOS DE TRABAJO............................................................................................6
2.2.2. FORMATO DE SENTENCIAS DB2-SQL EMBEBIDO.............................................................................7
2.2.3. SENTENCIA INCLUDE....................................................................................................................................7
2.2.3.1. DECLARACIN DE TABLAS...................................................................................................................8
2.2.4. VARIABLES HOST............................................................................................................................................9
3. RECUPERACIN DE DATOS...........................................................................11
3.1. CLASULA SELECT..................................................................................................................................................11
3.2. CLASULA INTO....................................................................................................................................................12
3.3. CLASULA FROM....................................................................................................................................................13
3.4. CLASULA WHERE.................................................................................................................................................13
3.4.1. CLAVES E NDICES........................................................................................................................................16
3.5. CLASULA ORDER BY. CONSULTAS ORDENADAS....................................................................................17
3.6. CLASULA GROUP BY / HAVING. CONSULTAS AGRUPADAS................................................................18
3.7. SUBCONSULTAS....................................................................................................................................................20
3.7.1.SUBCONSULTAS EN LA CLASULA WHERE.........................................................................................20
3.8. FUNCIONES DE COLUMNA................................................................................................................................22
3.8.1. SUM( ).................................................................................................................................................................22
3.8.2. AVG( )..................................................................................................................................................................23
3.8.3. MIN( ) Y MAX( )..............................................................................................................................................23
3.8.4. COUNT( ) Y COUNT(*)..................................................................................................................................23
3.9. OPERACIONES ARITMTICAS.........................................................................................................................24
3.10. RECUPERACIN DE DATOS DESDE 2 O MS TABLAS: JOIN............................................................24
4. MODIFICACIN DE DATOS..........................................................................26
4.1. UPDATE.......................................................................................................................................................................26
4.2. INSERT......................................................................................................................................................................27
4.3. DELETE.......................................................................................................................................................................29
5. CURSORES. TRABAJO CON MS DE UNA FILA...................................................31
5.1.DECLARE......................................................................................................................................................................32
5.2.OPEN............................................................................................................................................................................33
5.3.FETCH..........................................................................................................................................................................34
5.4.CLOSE..........................................................................................................................................................................36
5.5. MODIFICACIONES BASADAS EN CURSOR.................................................................................................36
5.5.1. DELETE...............................................................................................................................................................37
5.5.2. UPDATE..............................................................................................................................................................37
6. CONTROL DE TRANSACCIONES.....................................................................39
6.1. COMMIT.....................................................................................................................................................................39
6.2. ROLLBACK.................................................................................................................................................................39
7. LENGUAJE DE DEFINICION DE DATOS (DDL).....................................................41
7.1. CREACIN DE TABLAS.........................................................................................................................................41
7.2. MODIFICACIN DE TABLAS.............................................................................................................................41
7.3. CREACIN DE SINNIMOS..............................................................................................................................42
7.4. CREACIN DE INDICES......................................................................................................................................42
7.5. CREACIN DE VISTAS........................................................................................................................................43
7.5.1. ACTUALIZACIONES EN VISTAS Y EL ESTNDAR ANSI/ISO....................................................45
7.6. CREACIN DE AGRUPAMIENTOS O CLUSTERS.........................................................................................46
7.7. SUPRESIN DE OBJETOS..................................................................................................................................46
8. AUTORIZACIONES....................................................................................48
8.1. SENTENCIA GRANT..............................................................................................................................................48
8.2. SENTENCIA REVOKE............................................................................................................................................49
9. OPERADORES RELACIONALES.......................................................................50
9.1. UNION........................................................................................................................................................................50
9.2. INTERSECCION......................................................................................................................................................52
9.3. DIFERENCIA............................................................................................................................................................52
10. SENTENCIA INITIALIZE SOBRE TABLAS........................................................53
11. CONCEPTOS VARIOS................................................................................54
1. INTRODUCCIN
Representa la visin externa de los datos que tiene el usuario, sin tener en
cuenta la organizacin interna de los datos ni los dispositivos utilizados para su
almacenamiento.
Bsqueda de datos.
Crear, modificar y borrar objetos.
Crear, modificar y borrar los datos en los objetos.
Controlar el acceso a la base de datos y a los objetos.
Garantizar la consistencia de la B.D.
2. SQL EN PROGRAMAS DE APLICACIN
- Declarar las unidades de datos usados para pasar datos entre DB2 y
COBOL.
Ejemplo:
Formato:
EXEC SQL
INCLUDE <estructura-sql>
END-EXEC
donde estructura-sql ser el identificador de la estructura DB2-SQL,
generalmente una tabla, que ser incluida para obtener su imagen de definicin.
Nunca podr exceder de los ocho caracteres.
EXEC SQL
INCLUDE SQLCA
END-EXEC
EXEC SQL
INCLUDE PICTA_IN
END-EXEC
Como tal tabla tiene la estructura:
PICI_COD9-EXPEDI CHAR(9)
PICI_PERSONA CHAR(8)
PICI_EMPRESA CHAR(4)
PICI_CENTRO CHAR(4)
PICI_TIPOCTA CHAR(2)
PICI_NUMECTA CHAR(7)
01 PICTA-INTERV.
10 PICI-COD9-EXPEDI PIC X(9).
10 PICI-PERSONA PIC X(8).
10 PICI-EMPRESA PIC X(4).
10 PICI-CENTRO PIC X(4).
10 PICI-TIPOCTA PIC X(2).
10 PICI-NUMECTA PIC X(7).
Los datos recuperados por el DB2 son almacenados en las variables HOST para
usarlos en el programa. A su vez, los datos que van insertados o modificados
tambin estn referenciados en las variables.
La clasula INTO nombra las variables HOST del programa usadas para
recuperar los valores de las columnas seleccionadas por la sentencia SELECT.
3. RECUPERACIN DE DATOS
Formato:
SELECT [ALL|DISTINCT][{lista-de-items-de-seleccin|*}]
[INTO lista-de-variables]
FROM lista-de-tablas
[WHERE condicin-de-bsqueda ]
[GROUP BY columna-de-agrupacin ]
[HAVING condicin-de-bsqueda ]
[ORDER BY especificacin-de-ordenacin,..., ]
SELECT *
FROM DIEXTR.DIVISAS
- ALL: si se utiliza ALL no se puede utilizar la clusula WHERE, ya que con
aquella, se seleccionan todos los registros, tuplas o filas de la tabla
especificada. Si no indicamos ninguna condicin WHERE no ser necesario el
incluir ALL, ya que, por defecto de condicin en la seleccin, se asume el
rango total de registros de la tabla.
SELECT DIVI_DIVISA
FROM DIEXTR.DIVISAS
WHERE condicin-de-bsqueda
donde:
test-cuantificado: expresin { = | <> | < | <= | > | >= } [ ALL | ANY | SOME|
SOME ] subconsulta
SELECT OFICINA
FROM REPVENTAS
WHERE REGION = ESTE
OR REGION = Este
SELECT OFCINA
FROM REPVENTAS
WHERE INGRESOS >= 1000000
AND INGRESOS <= 1900000
SELECT OFICINA
FROM REPVENTAS
WHERE INGRESOS BETWEEN 1000000 AND 1900000
SELECT OFICINA
FROM REPVENTAS
WHERE REGION = ESTE
OR REGION = Este
OR REGION = este
SELECT OFICINA
FROM REPVENTAS
WHERE REGION IN (ESTE,Este,este)
Test de correspondencia patrn: Se comprueba si el valor de una columna
que contiene datos de una cadena de caracteres se corresponde con el
patrn especificado.
SELECT NOMBRE
FROM CLIENTES
WHERE NOMBRE LIKE E%
SELECT OFICINA
FROM REPVENTAS
WHERE COMISION IS NULL
Otro ejemplo:
SELECT NOMBRE
FROM VENDEDOR
WHERE OFICINA IS NULL
Clases de claves
Se pueden crear varios ndices sobre la misma tabla, stos se establecen, por
defecto, de forma ascendente.
ORDER BY especificacin-de-ordenacin,...,
Ejemplo:
SELECT DIVI_DIVISA,DIVI_DESCRIP,DIVI_CAMBDIV_ALTO
FROM DIEXTR.DIVISAS
ORDER BY DIVI_DIVISA,DIVI_DESCRIP
Las consultas, tal y como las hemos visto hasta ahora, condensan todos los
datos detallados del informe en una nica fila resumen de datos. Pero en
ocasiones es necesario resumir los resultados de la consulta a un nivel
subtotal por grupos, operacin que se realiza incluyendo en la sentencia
SELECT la clusula GROUP BY.
SELECT AVG(IMPORTE)
FROM PEDIDOS
AVG(IMPORTE)
$8,256.37
- Ejemplo 2.: Obtencin del importe medio de pedido para cada vendedor
REP AVG(IMPORTE)
101 $8,876.00
102 $5,694.00
103 $1,350.00
104 $7,685.40
105 $16,479.00
106 $11,477.33
107 $3,552.50
108 $11,566.00
En el primer ejemplo, se trata de una consulta simple como las vistas hasta
ahora.
En el segundo ejemplo, la consulta se realiza del modo siguiente:
Otro ejemplo:
3.7. SUBCONSULTAS
SELECT CIUDAD
FROM OFICINAS
WHERE OBJETIVO > (SELECT SUM(CUOTA)
FROM REPVENTAS
WHERE OFICINA_REP = OFICINA)
SELECT NOMBRE
FROM REPVENTAS
WHERE OFICINA_REP IN (SELECT OFICINA
FROM OFICINAS
WHERE VENTAS > OBJETIVO)
Ejemplos:
3.8.1. SUM( )
Totaliza una columna. Esta columna habr de ser de tipo numrico (entero,
decimal, coma flotante o monetario), siendo del mismo tipo el resultado
obtenido.
Ejemplo:
SELECT SUM(CUOTA),
SUM(VENTAS)
FROM REPVENTAS
3.8.2. AVG( )
Ejemplo:
SELECT AVG(PRECIO)
FROM PRODUCTOS
WHERE ID_FAB = ACI
Ejemplo:
SELECT MIN(CUOTA),
MAX(CUOTA),
MIN(FECHA_PEDIDO)
FROM PEDIDOS
SELECT COUNT(NUM_PEDIDO)
FROM PEDIDOS
WHERE IMPORTE > 10000.00
SELECT COUNT(*)
FROM PEDIDOS
WHERE IMPORTE > 10000.00
2. Para ordenar: por una columna que contenga el valor resultante de una
expresin, indicando su nmero de columna.
NOMBRE-DE-TABLA.CAMPO
En la clasula WHERE hay que nombrar las 2 columnas cuyos valores debern
ser iguales para identificar un par de filas (una de cada tabla) desde los cuales
se seleccionarn los datos.
4. MODIFICACIN DE DATOS
4.1. UPDATE
Donde:
UPDATE OFICINAS
SET CUOTA = 4000000.00, VENTAS = CUOTA
WHERE CUOTA < 4000000.00
UPDATE CLIENTES
SET REP_CLIE = 105
WHERE REP-CLIE IN (SELECT NUM_EMPL
FROM REPVENTAS
WHERE VENTAS < (0.8 * CUOTA)
4.2. INSERT
Formato es:
Donde:
Ejemplo:
INSERT INTO
REPVENTAS (NOMBRE, EDAD, NUM_EMPLE, VENTAS)
VALUES (FERNANDEZ PEREZ ANTONIO, 54, A125, 500000.00)
Ejemplo:
Slo se desea asignar informacin a los campos primero, segundo y quinto del
registro, no as a los siguientes, por lo que no es preciso especificarlos. Sin
embargo, al tercero y cuarto campo no vamos a asignarles informacin, porque
de momento, es desconocida, por ello, se les asigna valor NULL.
Los tipos de inserciones vistos, se refieren a insertar una sola fila, pero
tambin hay posibilidad de realizar lo que se conoce como inserciones multifila,
en las que los registros a insertar se obtienen a partir de una consulta o
SELECT.
Formato:
Ejemplo:
4.3. DELETE
Donde
Un cursor es la utilidad que facilita la opcin de poder leer fila por fila aquellas
que se seleccionaron en la sentencia SELECT. Se basa en las cuatro sentencias
siguientes:
FETCH, que realiza la captura o lectura del registro del cursor al que
apunta el puntero del mismo, obteniendo la informacin de cada campo o
atributo. A continuacin, el puntero se colocar sobre el siguiente
registro, para que, en una posterior ejecucin de la sentencia FETCH se
recupere.
5.1.DECLARE
El nombre del cursor no constituye una variable del lenguaje que establece el
interface con DB2-SQL, ya que se declara en la propia sentencia DECLARE.
Donde:
La tabla sobre la que se aplique esta sentencia, previamente deber haber sido
incluida, mediante la sentencia INCLUDE de la forma que ya hemos visto,
porque, de no hacerlo as, se producira error de precompilacin.
Ejemplos:
EXEC SQL
DECLARE DIVISAS FOR
SELECT DIVI_DIVISA,
DIVI_DESCRIP,
DIVI_CAMBDIV_PARID
WHERE DIVI_FECHA_BOLDIA = 01-02-1999
END-EXEC.
EXEC SQL
DECLARE DIVISAS FOR
SELECT DIVI_DIVISA,
DIVI_DESCRIP,
DIVI_CAMBDIV_PARID
WHERE DIVI_FECHA_BOLDIA = 01-02-1999
FOR UPDATE OF DIVI_CAMBDIV_PARID
END-EXEC.
5.2.OPEN
Formato:
OPEN nombre-de-cursor
El cursor debe haber sido previamente declarado (DECLARE ), porque, de no
hacerlo as, se producira el error 504: El cursor referenciado no ha sido
declarado.
Desde el momento en que se abre el cursor, las variables HOST que estn
inmersas en la clasula WHERE tomarn el valor que tengan en ese instante.
Esto es, si se necesitase recuperar ms filas para la misma condicin
expresada en la clasula DECLARE CURSOR, pero con valores de variables
HOST diferentes habra que cerrar el cursor, actualizar las variables y volver
a abrir el cursor.
5.3.FETCH
Donde:
Ejemplo:
EXEC SQL
FETCH DIVISAS
INTO :DIVI-DIVISA,
:DIVI-DESCRIP,
:DIVI-CAMBDIV-PARID
END-EXEC.
Puede ocurrir que la tabla resultante de la consulta est vaca, debido a que no
se cumplan las condiciones de declaracin del cursor (SELECT....WHERE... .). En
este caso, se obtendra un valor de SQLCODE igual a +100 al ejecutarse el
primer FETCH. Dicho valor se obtendra, igualmente, al alcanzar el final del
cursor durante la lectura. De esta manera podremos fcilmente controlar el fin
del cursor en una estructura de proceso cclica para su tratamiento.
CLOSE nombre-de-cursor
Ejemplo:
EXEC SQL
CLOSE DIVISAS
END-EXEC.
Formato:
Dado que, al abrir un cursor, nos posicionamos antes del primer registro, que
no sobre l, para poder proceder a su eliminacin mediante esta sentencia y
con este formato, tendramos que previamente realizar un FETCH de dicho
registro para poder proceder a su eliminacin, ya que, de no hacerlo as, se
producira el error de ejecucin +100: no se ha encontrado ninguna fila que
cumpla el criterio de bsqueda o la tabla consultada est vaca.
5.5.2. UPDATE
El cursor se habr tenido que definir con la opcin FOR UPDATE OF.
Formato:
UPDATE nombre-tabla SET lista-de-asignaciones
WHERE CURRENT OF nombre-de-cursor
Dado que, al abrir un cursor, nos posicionamos antes del primer registro, que
no sobre l, si deseramos modificarle, para poder hacerlo mediante esta
sentencia y con este formato, tendramos que previamente realizar un FETCH
del mismo para poder proceder a su modificacin, ya que, de no hacerlo as, se
producira el error de ejecucin +100: no se ha encontrado ninguna fila que
cumpla el criterio de bsqueda o la tabla consultada est vaca.
6.1. COMMIT
Formato:
EXEC SQL
COMMIT
END-EXEC
6.2. ROLLBACK
Formato:
EXEC SQL
ROLLBACK
END-EXEC.
Es conveniente situar puntos de ROLLBACK en las terminaciones por error del
programa, siempre y cuando se trate de un programa de actualizaciones.
Formato:
Este lenguaje agrupa una serie de sentencias que nos van a permitir el definir
los objetos que soportarn los datos.
En una columna de tipo CHAR o DATE un valor NULL, indica que la fila no
contiene ningn dato, por lo tanto el dato almacenado tiene longitud cero.
En una columna tipo NUMBER los datos NULL no son equivalentes al valor cero.
- Aadir columnas.
Permite que el usuario propietario utilice el mismo objeto con nombre distinto.
El formato es el siguiente:
La clasula UNIQUE establece que los valores ndice, formados por las
columnas que se indican, no pueden repetirse en ningn caso, si no se
especifica, el ndice se puede duplicar.
Cada vez que se realiza una consulta sobre tablas de la base de datos, el
resultado de la misma aparecer segn la estructura de aquellas, y en funcin
de las condiciones enunciadas al formular dichas consultas. Una vez finalizadas,
sus resultados desaparecern, no quedando almacenados de ninguna manera.
Por otro lado, y a no ser que el propio administrador de la base de datos
establezca o gestione permisos de accesos a la misma, a la informacin
contenida en las tablas podr acceder cualquier usuario.
Una Vista es una definicin almacenada de una sentencia SELECT, a la vez que
de sus resultados, que especifica o limita las columnas que hay que recuperar al
hacer posteriormente alusin a la vista. Podr contener hasta 250 campos, no
habiendo limitacin para el nmero de filas o registros, establecindose en
funcin del nmero de filas que haya en las tablas a las que la propia vista sea
relativa.
Sobre las vistas creadas se podrn aplicar todas las sentencias de DB2-SQL ya
tratadas.
Formato:
Para que una vista pueda ser actualizable, DB2-SQL deber ser capaz de
relacionar cualquier fila de la vista con su fila fuente en la tabla fuente.
Anlogamente, el DB2-SQL deber ser capaz de relacionar cada columna
individual a actualizar con su columna fuente en la tabla fuente
Estos tipos de datos se crean para que varias tablas se agrupen para compartir
una o varias columnas del mismo tipo, longitud y significado.
Formato:
Para crear el CLUSTER la tabla debe tener, al menos, una columna que tenga la
clasula NOT NULL.
Ejemplos:
Las tablas en DB2 estn protegidas, no se puede trabajar con ellas amenos que
se tenga la autorizacin para ello.
Formato:
Donde:
Antes de hacer un GRANT hay que crear el PLAN con un primer BIND.
Formato:
Slo se les puede dar la sentencia REVOKE a los recursos a los que se dio
GRANT.
Cada administrador del sistema tiene, por defecto, acceso total a cualquier
recurso DB2.
9.1. UNION
Sentencia-SELECT
UNION
Sentencia-SELECT
UNION
Sentencia_SELECT
...........
Ejemplo:
Hay que tener en cuenta una serie de restricciones en las tablas a combinar en
una operacin de UNION:
Ejemplo:
Formato:
SELECT col1,col2
FROM tabla1
WHERE col3 = constante
INTERSECT
SELECT col1, col2
FROM tabla2
WHERE col4 = constante
9.3. DIFERENCIA
Formato:
SELECT col1,col2
FROM tabla1
WHERE col3 = constante
MINUS
SELECT col1, col2
FROM tabla2
WHERE col4 = constante
10. SENTENCIA INITIALIZE SOBRE TABLAS
INITIALIZE <estructura>
Esta sentencia tambin puede ser aplicada a tablas. En este caso, una vez
ejecutada, el puntero de la tabla a la que se refiera, apuntar al comienzo de la
misma. Se tendr la precaucin de que la tabla especificada en la sentencia
haya sido declarada o incluida, de la forma ya vista, mediante la sentencia
INCLUDE.
Ejemplo:
INITIALIZE DIVISAS
REBIND: actualizar el plan (compara el plan con la tabla actual para ver si ha
cambiado mucho).
El BIND lee lo que hay en el DBRM, lo que hay en la tabla y, de acuerdo a eso
crea el PLAN.
Cada vez que se compile el programa hay que realizar el BIND.