Está en la página 1de 7

/* INICIO

Laboratorio 2 - SQL Intro


=========================================================================
Nivel: Basico, Intermedio Laboratorio: DDL SQL DB2 para i Fecha: 27-
08-2020
Compañía: Redsis Realizado por: Octavio Bustos
===================================================================================
================
Copie este SCRIPT a ACS (Run SQL Scripts) y desarrollelo a partir de alli.*/

/* CODIGO DE CONDUCTA DEL LABORATORIO


===================================================================================
================
Cada Pregunta contiene tres niveles de ayuda - planteamiento del problema (DIFICIL,
MODERADO, FACIL)
El tiempo de resolución para cada pregunta esta estimado de 5 a 7 minutos.

1) Para conocer el planteamiento debe empezar usando el nivel 'DIFICIL',


Se recomienda invertir un par de minutos en este nivel para entender el
planteamiento del problema
qué está expresado en terminología de usuario final o de negocio.

2) Si ya tiene claro lo solicitado, pero de todas formas necesita mas apoyo para
resolver el problema,
puede continuar con el nivel 'MODERADO'

3) Finalmente esta el nivel 'FACIL' que debería emplear si ha consumido mas


de 10 minutos
en la resolución del mismo y repasar el tema que le ha presentado
dificultades antes de continuar.

Cuando ejecute la ayuda llamando el procedimiento asociado a cada pregunta, se


podrá ver
el numero de la pregunta, La pregunta, Ayuda para obtener la respuesta dependiendo
del Nivel.

Debería copiar la columna 3 (ANSWER) a la sección --Ayuda de cada pregunta


y desarrollar su solución en la sección --Sentencia SQL
===================================================================================
================ */
-- Indique sus aceptación a continuación:
stop;
CALL LABSQLDB2.RESP_LAB(id_lab => 2, answer => '{"respuesta": ["Acepto"]}');
stop;

-- Establecer el schema de trabajo


--
-----------------------------------------------------------------------------------
-------------
/*
XX es el numero asignado a su schema de trabajo (Ej: iSQL13), asegurese de
reemplazarlo siempre donde corresponda.
Si sufre una desconexion con la base de datos, es necesario que ejecute de nuevo
esta sentencia.
*/
SET CURRENT schema ISQL36;
stop;
-- Explorar objetos en su Schema
--
-----------------------------------------------------------------------------------
-------------
stop;
SELECT * FROM DEPARTMENT;
STOP;

/*
Abrir ACS y expandir para explorar SCHEMAS
Expandir su Schema de trabajo ISQL36
Explorar los objetos SQL de su Schema y responder las siguientes preguntas:

R1. ¿Cual es el numero de Columnas de la tabla DEPARTMENT ? [ 5 ]


R2. ¿Que tipo de llave es la PRIMARY KEY ? [ a ]
a. NATURAL y SIMPLE
b. NATURAL y COMPUESTA
c. SUSTITUTA y SIMPLE
d. SUSTITUTA y COMPUESTA
R3. ¿Con que otro nombre se puede acceder a la tabla DEPARTMENT ? [ DEPARTMENT ]
R4. ¿Cuantas restricciones diferentes a PRIMARY KEY o FOREING KEY existen en su
schema ? [ 1 ]
R5. ¿Cuantos Indices de Llave NO UNICA existen para la tabla DEPARTAMENT ? [ 1 ]
*/
-- Indique sus respuestas a continuación:
STOP;
CALL LABSQLDB2.RESP_LAB(id_lab => 200, answer => '{"respuesta":
["5","a","DEPARTMENT","1","1"]}');
STOP;

-- Creación de Tablas
--
-----------------------------------------------------------------------------------
-------------
-- 1. Cree una estructura de tabla llamada FACTURA_XX en su schema de trabajo.
-- NO OLVIDE cambiar XX por el consecutivo de su schema de trabajo.
CALL LABSQLDB2.HINTS_LAB ('201', 'DIFICIL');
-- Ayuda

-- Sentencia SQL

stop;
CREATE TABLE FACTURA_36
(LIKE LABSQLDB2.FACTURA);
stop;

stop;
SELECT * FROM FACTURA_36;
stop;

-- 2. Cree una estructura de tabla llamada PAGO_36 en su schema de trabajo.


-- NO OLVIDE cambiar XX por el consecutivo de su schema de trabajo.
CALL LABSQLDB2.HINTS_LAB ('202', 'DIFICIL');
-- Ayuda

-- Sentencia SQL
stop;
CREATE TABLE PAGO_36 AS
(SELECT NIT, DOCUMENTO, NRO_DOCUMENTO, NRO_FACT, FECHA_PAGO FROM LABSQLDB2.PAGO)
WITH NO DATA;
stop;

stop;
SELECT * FROM PAGO_36;
stop;

-- 3. Cree una tabla llamada PACIENTE_36 en su shema de trabajo.


CALL LABSQLDB2.HINTS_LAB ('203', 'DIFICIL');
-- Ayuda

-- Sentencia SQL
stop;
CREATE TABLE PACIENTE_36 AS
(SELECT IDENTIFICACION, TIP_DOC_PAC, NOMBRE_PACIENTE, FCH_NACIMIENTO, SEXO,
DIRECCION, PRIMER_NOMBRE FROM LABSQLDB2.PACIENTE) WITH DATA;
stop;
SELECT * FROM PACIENTE_36;
stop;

-- 4. Cree una tabla llamada DESPACHOS_36 en su schema de trabajo.


CALL LABSQLDB2.HINTS_LAB ('204', 'DIFICIL');
-- Ayuda

-- Sentencia SQL
STOP;
CREATE TABLE DESPACHOS_36 AS
(SELECT * FROM LABSQLDB2.DESPACHOS) WITH DATA;
STOP;
SELECT * FROM DESPACHOS_36; --ORDER BY FECHA_SOLICITUD DESC;
STOP;
ALTER TABLE DESPACHOS_36 ADD MES SMALLINT;
STOP;

-- Alteración de Tablas
--
-----------------------------------------------------------------------------------
-------------
--5. Actualice la columna MES de la tabla DESPACHOS_36.
-- Tome el tiempo de ejecución en ms, ello aparece en el area de mensajes de ACS
CALL LABSQLDB2.HINTS_LAB ('205', 'DIFICIL');
-- Ayuda

-- Sentencia SQL
STOP;
UPDATE DESPACHOS_36 SET MES = MONTH (FECHA_SOLICITUD);
STOP;

-- R1. ¿Cual fue el tiempo de ejecución en ms? [ 12.131 ]


-- R2. ¿Cual fue el numero de filas actualizadas? [ 167913 ]
-- Indique sus respuestas a continuación:
CALL LABSQLDB2.RESP_LAB(id_lab => 205, answer => '{"respuesta":
["12.131","167913"]}');
stop;
-- Uso de Contraints
--
-----------------------------------------------------------------------------------
-------------
--6. Filtrado de filas para la tabla DESPACHOS_36
-- tome el tiempo de ejecución en ms, ello aparece en el area de mensajes de ACS
CALL LABSQLDB2.HINTS_LAB ('206', 'DIFICIL');
-- Ayuda

-- Sentencia SQL
STOP;
CREATE ALIAS CLIENTE_36 FOR QIWS.QCUSTCDT;
STOP;

-- R1. ¿Cual fue el tiempo de ejecución en ms ? [ 483 ]


-- Indique sus respuestas a continuación:
CALL LABSQLDB2.RESP_LAB(id_lab => 206, answer => '{"respuesta": ["483"]}');
stop;

-- 7. Cree un Constraint con la columna MES en la tabla DESPACHOS_XX.


CALL LABSQLDB2.HINTS_LAB ('207', 'DIFICIL');
-- Ayuda

-- Sentencia SQL
STOP;
ALTER TABLE DESPACHOS_36 ADD CONSTRAINT CHK_MES CHECK (MES BETWEEN 1 AND 12);

--Seleccione las filas de la tabla DESPACHOS_XX, donde el mes corresponda al mes


13.
-- Sentencia SQL
STOP;
SELECT * FROM DESPACHOS_36 WHERE MES = 13;
stop;

-- R1. ¿Cual fue el tiempo de ejecución en ms ? [ 582 ]


-- Indique sus respuestas a continuación:
CALL LABSQLDB2.RESP_LAB(id_lab => 207, answer => '{"respuesta": ["582"]}');
stop;

-- Vistas y Catálogos
--
-----------------------------------------------------------------------------------
-------------
--8. Consultar el Catalogo de la base de datos.
-- Se requiere generar una consulta rápida del modelo de datos para ejercicios
posteriores.
CALL LABSQLDB2.HINTS_LAB ('208', 'DIFICIL');
-- Ayuda
/* 208 DIFICIL
Cree una vista llamada DATAMOD en su schema de trabajo basada en el catalogo de
COLUMNAS de Db2

La vista debe incluir todas las filas de tablas que terminen en _XX, (XX es el
consecutivo asignado a su schema de trabajo).
La vista debe contener las siguientes columnas del catalogo:
Nombre del schema: TABLE_SCHEMA
Nombre de tabla: TABLE_NAME
Orden posicional de la columna en la tabla: ?
Nombre de la columna: ?
Tipo de datos: ?
Longitud: ?
Posiciones decimales: NUMERIC_SCALE
Encabezado de Columna: COLUMN_HEADING

Tip: Use el catalogo de su esquema de trabajo NO el global de la base de datos.


*/

-- Sentencia SQL
STOP;
CREATE OR REPLACE VIEW DATAMOD AS
(SELECT DBNAME, TBNAME, ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, LENGTH,
NUMERIC_SCALE, COLUMN_HEADING FROM SYSCOLUMNS WHERE TBNAME LIKE '%36');
STOP;
SELECT * FROM DATAMOD;
stop;

-- Generar SQL DDL - Ingeniería Reversa


--
-----------------------------------------------------------------------------------
-------------
--9. Generar SQL DDL usando ACS.
CALL LABSQLDB2.HINTS_LAB ('209', 'DIFICIL');
-- Ayuda
/* 209 DIFICIL
Se requiere generar el DDL de una tabla de clientes y realizar unos ajustes de
restricciones.

Debe crear una tabla llamada CUSTOMER_XX basada en todas las columnas y datos de un
objeto
ubicado en el schema QIWS y cuyo nombre es QCUSTCDT.

Una vez creada asegurese de ubicar el cursor al final de este comentario y pulse el
ICONO de Insert Generated SQL
Pulse el boton -->ADD y seleccione la tabla recien creada CUSTOMER_XX de su esquema
de trabajo
Deje los valores por omision y pulse el boton --> GENERATE

*** Dada la latencia de la red , este procedimiento puede tardar algunos minutos.
***
Si no pudo completar la actividad via ACS, puede continuar con el siguiente
ejercicio.
*/

-- Sentencia SQL
-- Generar SQL
-- Versión: V7R3M0 160422
-- Generado en: 21/02/13 13:33:25
-- Base de datos relacional: N2104FAW
-- Opción de estándares: ISO
CREATE TABLE ISQL36.CUSTOMER_36 (
CUSNUM NUMERIC(6, 0) NOT NULL DEFAULT 0 ,
LSTNAM CHAR(8) NOT NULL DEFAULT ' ' ,
INIT CHAR(3) NOT NULL DEFAULT ' ' ,
STREET CHAR(13) NOT NULL DEFAULT ' ' ,
CITY CHAR(6) NOT NULL DEFAULT ' ' ,
STATE CHAR(2) NOT NULL DEFAULT ' ' ,
ZIPCOD NUMERIC(5, 0) NOT NULL DEFAULT 0 ,
CDTLMT NUMERIC(4, 0) NOT NULL DEFAULT 0 ,
CHGCOD NUMERIC(1, 0) NOT NULL DEFAULT 0 ,
BALDUE NUMERIC(6, 2) NOT NULL DEFAULT 0 ,
CDTDUE NUMERIC(6, 2) NOT NULL DEFAULT 0 ) ;

GRANT ALTER , DELETE , INDEX , INSERT , REFERENCES , SELECT , UPDATE


ON ISQL36.CUSTOMER_36 TO ISQLGRP WITH GRANT OPTION ;

GRANT ALTER , DELETE , INDEX , INSERT , REFERENCES , SELECT , UPDATE


ON ISQL36.CUSTOMER_36 TO LABUSER36 WITH GRANT OPTION ;

--10. Generar SQL DDL usando SQL.


-- Primero debe ejecutar las siguientes comandos CL para crear el objeto que le
dará persistencia
-- al fuente del script DDL generado.
-- Pulse el ICONO run selected o run from selected.

-- Crea archivo de Fuentes -- actualice el nombre de su esquema de trabajo antes de


ejecutar
stop;
CL:CRTSRCPF FILE(ISQL36/QSQLSRC) RCDLEN(112) TEXT('GenSQL - Reverse DDL');
stop;
-- Crea miembro fuente -- actualice el nombre de su esquema de trabajo antes de
ejecutar
CL:ADDPFM FILE(ISQL36/QSQLSRC) MBR(LAB2A_DDL) TEXT('LAB2 DDL');
stop;
CALL LABSQLDB2.HINTS_LAB ('210', 'MODERADO');
stop;
-- Ayuda
/* 210 MODERADO
Para el parametro que filtra el Nombre de objeto puede utilizar el comodin %
antes de los
caracteres de busqueda _XX

Si desea comprobar el resultado realice la siguiente consulta SQL


SELECT * FROM DATABASE_SOURCE_FILE_LIBRARY_NAME.DATABASE_SOURCE_FILE_NAME;

Si su archivo de Fuentes tiene mas de un miembro fuente, es posible que deba


crear un aLias apuntando al
miebro fuente deseado. CREATE ALIAS nombre-alias FOR Schema.Archivo-
Fuentes(Miembro-Fuente);
*/

-- Sentencia SQL
STOP;
CALL QSYS2.GENERATE_SQL(
DATABASE_OBJECT_NAME => '%_36',
DATABASE_OBJECT_LIBRARY_NAME => 'ISQL36',
DATABASE_OBJECT_TYPE => 'TABLE',
DATABASE_SOURCE_FILE_NAME => 'QSQLSRC',
DATABASE_SOURCE_FILE_LIBRARY_NAME => 'ISQL36',
DATABASE_SOURCE_FILE_MEMBER => 'LAB2A_DDL',
DROP_OPTION => 1,
COMMENT_OPTION => 1,
LABEL_OPTION => 1
);
STOP;

-- También pude generar el DDL y obtener el código fuente en un result set, para
ello
-- ejecute el mismo procedimiento anterior y elimine todos los parámetros
-- que inician con DATABASE_SOURCE_FILE

-- Sentencia SQL
STOP;
CALL QSYS2.GENERATE_SQL(
DATABASE_OBJECT_NAME => '%_36',
DATABASE_OBJECT_LIBRARY_NAME => 'ISQL36',
DATABASE_OBJECT_TYPE => 'TABLE',
DROP_OPTION => 1,
COMMENT_OPTION => 1,
LABEL_OPTION => 1
);
STOP;

-- FIN

También podría gustarte