El codigo de los programas para el dia jueves 25 de junio está en la copiadora de la Biblioteca.
Tome en cuenta las instrucciones dadas en clase, analice bien el código para que realice los comentarios pertinentes.
miércoles 24 de junio de 2009
LABORATORIO PHP
LOS PROGRAMAS QUE VAN A CONTINUACION ESTAN CONCATENADOS POR PARES.
REVISE ATENTAMENTE EL CODIGO PARA EL ANALISIS CORRESPONDIENTE.
//programa88.php crea una tabla con enlaces para ver las imágenes en el siguiente programa
include_once('libreria.inc');
$sql="select codigo,inmueble from inmuebles;";
$resultado=pg_exec(conecta(),$sql)or die('No hay imágenes');
$lista='';
";
pg_free_result($resultado);
echo $lista;
}
?>
//programa89.php Obtiene la imagen de la base de datos utilizando el código
include_once('libreria.inc');
$codigo=$_REQUEST['codigo'];
if(isset($codigo)){
$sql="select codigo,coalesce(foto,'-1') as foto,";
$sql.="tama,tipo from inmuebles ";
$sql.="where codigo=$codigo; ";
$resultado=pg_exec(conecta(),$sql)or die('No hay imágenes');
$filas=pg_num_rows($resultado);
$fila=pg_fetch_row($resultado,0);
pg_free_result($resultado);
if($fila[1]==-1)die('No hay foto para bajar');
$foto=pg_unescape_bytea($fila[1]);
header("content_type:$fila[3]");
header("content_lenght:$fila[2]");
print $foto;
}
?>
//programa88_1.php crea una tabla con enlaces para ver las imágenes
include_once('libreria.inc');
$sql="select codigo,inmueble from inmuebles;";
$resultado=pg_exec(conecta(),$sql)or die('No hay imágenes');
$lista='';
";
pg_free_result($resultado);
echo $lista;
}
?>
//programa90 crea un formulario para seleccionar una imagen de la bdd
include_once('libreria.inc');
if($_REQUEST['codigo']){
$codigo=$_REQUEST['codigo'];
$sql="select codigo,inmueble from inmuebles ";
$sql.="where codigo=$codigo; ";
$resultado=pg_exec(conecta(),$sql)or die('No hay imágenes');
$lista='';
";
pg_free_result($resultado);echo $lista;}}
else{
$sql="select codigo,inmueble from inmuebles;";
$resultado=pg_exec(conecta(),$sql)or die('datos');
$filas=pg_num_rows($resultado);
$formulario= ---ojo faltan caracteres propios del HEREDOC --- FINFOR
html> head> title>Insertar figuras /title> /head> body>
h1>Insertar /h1>
form method="POST" enctype="multipart/form-data" action"$_PHP_SELF">
Seleccione un código select name="codigo">
FINFOR;
echo $formulario;
for($i=1;$i<=$filas;$i++){
$columna=pg_fetch_row($resultado);?>
option value="">
}
?>
/select>
/form> /body> /html>
}
?>
Nota: Tenga presente las indicaciones dadas en clase.
REVISE ATENTAMENTE EL CODIGO PARA EL ANALISIS CORRESPONDIENTE.
//programa88.php crea una tabla con enlaces para ver las imágenes en el siguiente programa
include_once('libreria.inc');
$sql="select codigo,inmueble from inmuebles;";
$resultado=pg_exec(conecta(),$sql)or die('No hay imágenes');
$lista='
| $fila[codigo] | ";"; $lista.="Ver imagen | ";$fila[inmueble] |
pg_free_result($resultado);
echo $lista;
}
?>
//programa89.php Obtiene la imagen de la base de datos utilizando el código
include_once('libreria.inc');
$codigo=$_REQUEST['codigo'];
if(isset($codigo)){
$sql="select codigo,coalesce(foto,'-1') as foto,";
$sql.="tama,tipo from inmuebles ";
$sql.="where codigo=$codigo; ";
$resultado=pg_exec(conecta(),$sql)or die('No hay imágenes');
$filas=pg_num_rows($resultado);
$fila=pg_fetch_row($resultado,0);
pg_free_result($resultado);
if($fila[1]==-1)die('No hay foto para bajar');
$foto=pg_unescape_bytea($fila[1]);
header("content_type:$fila[3]");
header("content_lenght:$fila[2]");
print $foto;
}
?>
//programa88_1.php crea una tabla con enlaces para ver las imágenes
include_once('libreria.inc');
$sql="select codigo,inmueble from inmuebles;";
$resultado=pg_exec(conecta(),$sql)or die('No hay imágenes');
$lista='
| $fila[codigo] | ";"; $lista.="Ver imagen | ";$fila[inmueble] |
pg_free_result($resultado);
echo $lista;
}
?>
//programa90 crea un formulario para seleccionar una imagen de la bdd
include_once('libreria.inc');
if($_REQUEST['codigo']){
$codigo=$_REQUEST['codigo'];
$sql="select codigo,inmueble from inmuebles ";
$sql.="where codigo=$codigo; ";
$resultado=pg_exec(conecta(),$sql)or die('No hay imágenes');
$lista='
| $fila[codigo] | ";$lista.=" | ";$fila[inmueble] |
pg_free_result($resultado);echo $lista;}}
else{
$sql="select codigo,inmueble from inmuebles;";
$resultado=pg_exec(conecta(),$sql)or die('datos');
$filas=pg_num_rows($resultado);
$formulario= ---ojo faltan caracteres propios del HEREDOC --- FINFOR
html> head> title>Insertar figuras /title> /head> body>
h1>Insertar /h1>
form method="POST" enctype="multipart/form-data" action"$_PHP_SELF">
Seleccione un código select name="codigo">
FINFOR;
echo $formulario;
for($i=1;$i<=$filas;$i++){
$columna=pg_fetch_row($resultado);?>
option value="">
}
?>
/select>
/form> /body> /html>
}
?>
Nota: Tenga presente las indicaciones dadas en clase.
jueves 4 de junio de 2009
BDDM: Laboratorio 11
MINEO DE DATOS
Material: lleve consigo el documento “An introduction to NeuralWorks Predict”.
Actividades:
1.- Ingrese al Oracle y verifique que el modelo de DWH contenga las tablas de dimensiones y la de Hechos:
D_TIEMPO
D_CLIENTE
D_INMUEBLE
D_STAFF
D_BRANCH
HECHOS
2.- Mediante DESCRIBE visualice la estructura de cada una de las tablas del modelo.
3.- Cree una vista OLAP01
create view olap01
as
select t.fecha, c.genero cliente, s.genero staff, tipo, region,sum(h.renta) renta
from d_tiempo t, d_cliente c, d_staff s, d_inmueble i, d_branch b, hechos h
where h.fecha = t.fecha
and h.cliente = c.cedula
and h.staff = s. sno
and h.inmueble = i.ino
and h.branch = b.bno
and anio = 2004
group by t.fecha, c.genero, s.genero, tipo, region;
3.- Consulte la vista generada
SELECT * FROM OLAP01;
Tome nota del número de registros generados y salga del ORACLE:
Generación de una hoja electrónica para mineo de datos.
1.- Siga las instrucciones que se irán impartiendo para la generación de la hoja.
function ODBC9 ()
{
static $con;
if (!isset($con))
{
$con = odbc_connect("ORCL1","USUARIO","PASSWORD")
or die ("no conecta a Oracle en windows");
}
return $con;
}
$sql = "select * from olap01";
$resultado = odbc_exec (ODBC9(),$sql)
or die ("No hay datos");
$columnas = odbc_num_fields($resultado);
$arrreglo = array();
for ($i = 1; $i <= $columnas; $i++)
{
$arreglo[$i]= odbc_field_name($resultado, $i);
}
$arreglo = implode("\t",$arreglo);
$temporal = array();
$completo = $arreglo;
while ($fila = odbc_fetch_into($resultado,$temporal))
{
$temporal = implode("\t", $temporal);
$completo = implode("\n", array($completo, $temporal));
}
$archivo = 'OLAP01.xls';
$x = fopen($archivo,"w+");
fwrite($x, $completo);
fclose($x);
echo "Finalizado exitosamente, abra el Excel";
?>
2.- Abra el Excel y siga las instrucciones del documento “An introduction to NeuralWorks Predict”.
Material: lleve consigo el documento “An introduction to NeuralWorks Predict”.
Actividades:
1.- Ingrese al Oracle y verifique que el modelo de DWH contenga las tablas de dimensiones y la de Hechos:
D_TIEMPO
D_CLIENTE
D_INMUEBLE
D_STAFF
D_BRANCH
HECHOS
2.- Mediante DESCRIBE visualice la estructura de cada una de las tablas del modelo.
3.- Cree una vista OLAP01
create view olap01
as
select t.fecha, c.genero cliente, s.genero staff, tipo, region,sum(h.renta) renta
from d_tiempo t, d_cliente c, d_staff s, d_inmueble i, d_branch b, hechos h
where h.fecha = t.fecha
and h.cliente = c.cedula
and h.staff = s. sno
and h.inmueble = i.ino
and h.branch = b.bno
and anio = 2004
group by t.fecha, c.genero, s.genero, tipo, region;
3.- Consulte la vista generada
SELECT * FROM OLAP01;
Tome nota del número de registros generados y salga del ORACLE:
Generación de una hoja electrónica para mineo de datos.
1.- Siga las instrucciones que se irán impartiendo para la generación de la hoja.
function ODBC9 ()
{
static $con;
if (!isset($con))
{
$con = odbc_connect("ORCL1","USUARIO","PASSWORD")
or die ("no conecta a Oracle en windows");
}
return $con;
}
$sql = "select * from olap01";
$resultado = odbc_exec (ODBC9(),$sql)
or die ("No hay datos");
$columnas = odbc_num_fields($resultado);
$arrreglo = array();
for ($i = 1; $i <= $columnas; $i++)
{
$arreglo[$i]= odbc_field_name($resultado, $i);
}
$arreglo = implode("\t",$arreglo);
$temporal = array();
$completo = $arreglo;
while ($fila = odbc_fetch_into($resultado,$temporal))
{
$temporal = implode("\t", $temporal);
$completo = implode("\n", array($completo, $temporal));
}
$archivo = 'OLAP01.xls';
$x = fopen($archivo,"w+");
fwrite($x, $completo);
fclose($x);
echo "Finalizado exitosamente, abra el Excel";
?>
2.- Abra el Excel y siga las instrucciones del documento “An introduction to NeuralWorks Predict”.
martes 19 de mayo de 2009
BDDD: Laboratorio 9
CREACION DE APLICACIONES CON FORMS
Tablas empleadas en este laboratorio:
CREATE TABLE DEPARTAMENTOS
(NUM_DEP NUMBER CHECK (NUM_DEP > 0),
NOMBRE_DEP CHAR (20),
LOCALIDAD CHAR (25),
CONSTRAINT PK_DEPARTA PRIMARY KEY (NUM_DEP));
CREATE TABLE EMPLEADOS
(NUM_EMP CHAR (4),
NOMBRES CHAR (20),
APELLIDOS CHAR (20),
CARGO CHAR (20),
JEFE,
FECHA_INGRESO DATE,
FECHA_NACIMIENTO DATE,
SUELDO NUMBER CHECK (SUELDO > 0),
CARGAS NUMBER CHECK (CARGAS >= 0),
NUM_DEP,
CONSTRAINT PK_EMPLEADO PRIMARY KEY (NUM_EMP),
CONSTRAINT FK_DEPARTA FOREIGN KEY (NUM_DEP)
REFERENCES DEPARTAMENTOS (NUM_DEP),
CONSTRAINT FK_EMPLEADO FOREIGN KEY (JEFE)
REFERENCES EMPLEADOS (NUM_EMP));
INSERT INTO DEPARTAMENTOS VALUES
(1, ‘GERENCIA’,’CENTRO’);
INSERT INTO DEPARTAMENTOS VALUES
(2, ‘FINANCIERO’,’NORTE’);
INSERT INTO DEPARTAMENTOS VALUES
(3, ‘PERSONAL’,’SUR’);
INSERT INTO DEPARTAMENTOS VALUES
(4, ‘PRODUCCION’,’VALLES’);
ACTIVIDAD PREVIA: Cree un directorio con el nombre FORMULARIOS.
ACTIVIDAD 1.- Creación de un formulario para consulta de datos de DEPARTAMENTOS.
1.- Arranque el Form Builder como es usual
2.- Active Use datablock wizard, OK
3.- Welcome, Next
4.- Active Table or View, Next
5.- En Browse, conéctese al servidor Oracle con su UID, PASS y Cadena de conexión, connect
6.- Elija de la lista la tabla DEPARTAMENTOS
7.- Pase al costado derecho todos los campos de la tabla DEPARTAMENTOS, Next
8.- Active Create data block, Finísh.
9.- En Welcome to the Layout Wizard, Next, Next, Next
10.-Pase nuevamente los campos a la derecha, Next
11.- En la Columna Promt., cambie los nombres de los campos por otros más significativos, ej. Num_dep a Departamento.
Cuando haya terminado, Next
12.- Elija Form, Next
13.- En el espacio para el nombre del Frame ponga DEPARTAMENTOS, Next
14.- En Congratulations!, Finish.
15.- De un clic en el semáforo
16.- De la barra de menú elija Query, Execute
17.- Utilice las flechas para navegar entre los registros.
18.- De la barra de menú elija Action, Exit.
19.- En el árbol de navegación, cambie MODULO1 por FORMULARIO01
20.- De la barra de menú elija File, Save
21.- Cierre el FORMULARIO01
ACTIVIDAD 2.- Creación de un formulario para consulta de datos de empleados.
1.- Arranque el Form Builder como es usual
2.- Active Use datablock wizard, OK
3.- Welcome, Next
4.- Active Table or View, Next
5.- En Browse, conéctese al servidor Oracle con su UID, PASS y Cadena de conexión, connect
6.- Elija de la lista la tabla EMPLEADOS
7.- Pase al costado derecho todos los campos de la tabla EMPLEADOS, Next
8.- Active Create data block, Finísh.
9.- En Welcome to the Layout Wizard, Next, Next, Next
10.-Pase nuevamente los campos a la derecha, Next
11.- En la Columna Promt., cambie los nombres de los campos por otros más significativos, ej. Num_emp a Número, Num_dep a Departamento.
Cuando haya terminado, Next
12.- Elija Form, Next
13.- En el espacio para el Frame ponga EMPLEADOS, Next
14.- En Congratulations!, Finish.
15.- De un clic en el semáforo
16.- De la barra de menú elija Query, Execute
17.- Utilice las flechas para navegar entre los registros.
18.- De la barra de menú elija Action, Exit.
19.- En el árbol de navegación, cambie MODULO1 por FORMULARIO02
20.- De la barra de menú elija File, Save
21.- Cierre el FORMULARIO02
ACTIVIDAD 3.- Creación de un formulario para ingreso de datos de empleados.
Si no tiene arrancado el Form Builder, repita el paso 1 de la Actividad 1.
En Use Data Block Wizard, presione Cancel.
1.- Si no tiene un Nuevo modulo, active Forms y presione el signo + (De color verde)
2.- Cambie el nombre del módulo a FORMULARIO03.
3.- Active Data blocks y presione el signo + (De color verde)
4.- En New Data Block, elija Build a new data block manually, OK
5.- Cambie el nombre del bloque a DATOS
6.- De un click derecho en FORMULARIO3 y elija Layout Editor
7.- En la pantalla de diseño elija el control Frame, dráguelo hasta la pantalla, dando una amplitud suficiente para los datos de empleados.
8.- De un click derecho sobre el Frame y elija Property Palette
9.- En Layout Data Block elija DATOS
10.- En Frame Title borre el Label
11.- En Background color elija uno que se asemeje al color de fondo del formulario
12.- Elija Data Block y presione el signo + (De color verde)
13.- En New Data Block, elija Build a new data block manually, OK
14.- Cambie el nombre del bloque a BOTONES
15.- En la pantalla de diseño elija el control Frame, dráguelo hasta la pantalla, dando una amplitud suficiente para ubicar tres botones de control.
16.- De un click derecho sobre el Frame y elija Property Palette
17.- En Layout Data Block elija BOTONES
18.- En Frame Title borre el Label
19.- En Background color elija uno que se asemeje al color de fondo del formulario
20.-En el árbol de navegación elija Data base objects, localice su nombre de usuario, elija Tables, EMPLEADOS, Columns.
21.- En la pantalla de diseño elija el control Text item, dráguelo hasta la parte cercana al extremo superior izquierdo.
22.- De click derecho sobre la caja de texto y elija property palette.
23.- En Name cambie a NUM_EMP
24.- Repita los pasos 21, 22 y 23 para cada una de las columnas de la tabla EMPLEADOS
En el campo FECHA_NACIMIENTO en la propiedad Data Type elija Date, en la propiedad Format Mask digite MM/DD/YYYY
Realice lo mismo para el campo FECHA_INGRESO.
25.- Active la primera caja de texto y en property palette, localice PROMPT.
26.- Cambie el prompt a una frase o nombre significativo para cada caja de texto. Por ej. Para NUM_EMP Número, para FECHA_NACIMIENTO Fecha de nacimiento.
27.- Repita los pasos 25 y 26 para cada una de las cajas de texto.
28.- Revise el árbol de navegación. En el bloque DATOS revise que estén todos los nombres de los campos de la tabla EMPLEADOS.
29.- Active el bloque BOTONES
30.- En la pantalla de diseño elija el control BUTTON, dráguelo hasta el frame de botones
31.- En property palette, cambie el nombre del botón a Ingresar, en Label Ingresar
32.- Repita los pasos 30 y 31 para dos nuevos botones llamados Otro y Salir.
33.- De un click derecho sobre el botón Salir y elija Smart Trigger, WHEN-BUTTON-PRESSED
34.- En la pantalla de edición de código digite EXIT_FORM;
35.- Presione COMPILE y verifique el resultado.
36.- Si obtuvo Succesfully compiled, elija Close, de lo contrario corrija lo errado y repita el paso 35.-
37.- En la pantalla de diseño presione el semáforo.
38.- En la pantalla de ejecución presione el botón Salir. La aplicación deberá terminar y regresar a la pantalla de diseño.
39.- Repita los pasos 33, 34, 35, y 36 para el botón INGRESAR pero cambiando el código por lo siguiente:
BEGIN
INSERT INTO EMPLEADOS
(NUM_EMP, APELLIDOS, NOMBRES, FECHA_NACIMIENTO,
CARGO, FECHA_INGRESO, JEFE, SUELDO, CARGAS, NUM_DEP)
VALUES
(:DATOS.NUM_EMP, :DATOS.APELLIDOS, :DATOS.NOMBRES,
:DATOS.FECHA_NACIMIENTO,
:DATOS.CARGO, :DATOS.FECHA_INGRESO, :DATOS.JEFE,
:DATOS.SUELDO, :DATOS.CARGAS, :DATOS.NUM_DEP);
COMMIT;
END;
40.- Repita los pasos 33, 34, 35, y 36 para el botón OTRO pero cambiando el código por lo siguiente:
BEGIN
GO_BLOCK (‘DATOS’);
:DATOS.NUM_EMP := ‘’;
:DATOS.APELLIDOS := ‘’;
:DATOS.NOMBRES := ‘’;
:DATOS.FECHA_NACIMIENTO := ‘’;
:DATOS.CARGO := ‘’;
:DATOS.FECHA_INGRESO := ‘’;
:DATOS.JEFE := ‘’;
:DATOS.SUELDO := ‘’;
:DATOS.CARGAS := ‘’;
:DATOS.NUM_DEP := ‘’;
GO_ITEM (‘:DATOS.NUM_EMP’);
END;
41.- En la pantalla de diseño presione el semáforo.
42.- En la ventana de ejecución presione el botón Salir.
43.- Repita el paso 41 y 42, pero esta vez presione el botón Otro.
44.- Ingrese datos en cada uno de los campos y presione el botón Ingresar.
45.- Pruebe con los botones Otro y finalmente Salir.
ACTIVIDAD 4.- Incorporación de listas de valores (LOVs) para el ingreso de datos.
Debe tener abierta la pantalla de diseño del FORMULARIO03 construido en la Actividad 3.
1.- En el árbol de navegación elija LOVs y presione el + (De color verde)
2.- Seleccione Use LOV wizard, Next
3.- Seleccione New record Group base on a Query, Next
4.- En el espacio de edición de SQL digite
SELECT NUM_EMP, APELLIDOS
FROM EMPLEADO
ORDER BY 1
5.- Presione Check sintax. Si hay errores corríjalos. Next
6.- Pase los dos campos a la derecha, Next
7.- Edite los títulos de los campos si desea, Next
8.- Ponga el título Jefes, Next
9.- En Retrieve ponga 5, Next, Next, Next, Finísh.
10.- Cambie el LOV1 a JEFES. Lo mismo en Record groups a JEFES.
11.- De click derecho en el LOV JEFES y elija property palette.
12.- En Column Mapping Properties, elija NUM_EMP
13.- En Browse elija DATOS.JEFE, OK, OK
14.- En la pantalla de diseño elija el campo JEFE
15.- En propiedades para JEFE, en List of Values elija el LOV JEFES.
16.- Repita los pasos 1 al 15 para generar una lista de departamentos, pero en el paso 4. digite
SELECT NUM_DEP, NOMBRE_DEP
FROM DEPARTAMENTOS
ORDER BY 1
En el paso 10.- cambie el LOVx a DEPARTAMENTOS
Realice los demás pasos en forma coherente con la información de los departamentos.
17.- Ejecute el FORMULARIO03. Ingrese los datos, pero al llegar al campo JEFE presione la tecla F9. Elija un jefe de la lista, OK.
Igual para el campo NUM_DEP.
ACTIVIDAD 5.- Incorporación de verificaciones previas en los datos y chequeo de errores.
1.- Guarde el FORMULARIO03 con File, Save,
2.- Gurde nuevamente el FORMULARIO03 pero esta vez con File, Save As FORMULARIO04.
3.- En el árbol de navegación cambie el nombre FORMULARIO03 por FORMULARIO04.
3.- Con click derecho active la pantalla de diseño, si aun no estaba activa.
4.- De click derecho sobre el botón Ingresar, elija Smart triggers, When-Button-pressed
5.- En la ventana de edición digite:
DECLARE
FALTAN_DATOS EXCEPTION;
BEGIN
/* VERIFICACIÓN DE QUE NO HAYA CAMPOS EN BLANCO */
IF :DATOS.NUM_EMP IS NULL OR
:DATOS.APELLIDOS IS NULL OR
:DATOS.NOMBRES IS NULL OR
:DATOS.FECHA_NACIMIENTO IS NULL OR
:DATOS.CARGO IS NULL OR
:DATOS.FECHA_INGRESO IS NULL OR
:DATOS.JEFE IS NULL OR
:DATOS.SUELDO IS NULL OR
:DATOS.NUM_DEP IS NULL THEN
RAISE FALTAN_DATOS;
IF :DATOS.CARGAS IS NULL THEN
:DATOS.CARGAS := 0;
END IF;
END IF;
INSERT INTO EMPLEADOS
(NUM_EMP, APELLIDOS, NOMBRES, FECHA_NACIMIENTO,
CARGO, FECHA_INGRESO, JEFE, SUELDO, CARGAS, NUM_DEP)
VALUES
(:DATOS.NUM_EMP, :DATOS.APELLIDOS, :DATOS.NOMBRES,
:DATOS.FECHA_NACIMIENTO,
:DATOS.CARGO, :DATOS.FECHA_INGRESO, :DATOS.JEFE,
:DATOS.SUELDO, :DATOS.CARGAS, :DATOS.NUM_DEP);
COMMIT_FORM;
EXCEPTION
WHEN FALTAN_DATOS THEN
MESSAGE ('Faltan datos, revise');
RAISE Form_Trigger_Failure;
WHEN DUP_VAL_ON_INDEX THEN
MESSAGE ('Ya existe este registro: '|| SQLERRM);
RAISE Form_Trigger_Failure;
WHEN OTHERS THEN
MESSAGE ('Hay errores: '|| SQLCODE || ' '|| SQLERRM);
RAISE Form_Trigger_Failure;
END;
ACTIVIDAD 6.- Ejecución de aplicaciones desde la consola.
1.- De clic derecho en la pantalla de Windows
2.- Nuevo, Acceso directo
3.- En examinar localice el ejecutable IFRUN60.EXE
4.-Aceptar
5.- En el casillero de edición complete con el path del módulo ejecutable de la aplicación por ej.:
C:\Dev6i\BIN\ifrun60.EXE MODULE=C:\FORMULARIOS\DEPARTAMENTOS
6.- Complete los requerimientos que se le solicitan aceptando los valores por defecto.
7.- Para ejecutar la aplicación de doble click en el ícono creado en la pantalla.
ACTIVIDAD 7.- Construcción de aplicación Master – Detail con ingreso de valor de consulta
1.- Inicie el Forms como es usual.
2.- En el asistente presione Cancel para salir al árbol de navegación.
3.- Cambie MODULE1 por FORMULARIO5
4.- Con clic derecho en FORMULARIO5, elija Layout Editor
5.- Ubique un Frame en la parte superior de la pantalla de diseño y cambie las propiedades para tener una apariencia agradable.
6.- En data blocas elija nuevo, y manualmente, Ok
7.- Cambie la denominación del bloque a DEPARTAMENTOS
8.- Regrese a las propiedades del frame y en layout datablock elija DEPARTAMENTOS,
9.- Ubique el frame dos cajas de texto y cambie los nombres a NUM_DEP y NOMBRRE_DEP
10.-Cree un nuevo frame en la parte inferior del primero, dando una amplitud suficiente para que quepan unos cinco registros horizontalmente.
11.- Cree un nuevo bloque y cambie el nombre a EMPLEADOS
12.- Regrese al último frame y cambie la propiedad layout datablock a EMPLEADOS
13.- En el bloque EMPLEADOS cambie la propiedad Records displayed a 5
14. En el frame ubique tres cajas de texto y cambie los nombres a NOMBRE, APELLIDOS, SUELDO
15.- Ubique un nuevo frame en la parte inferior con suficiente amplitud para dar cabida a tres botones.
16.- Cree un nuevo bloque y renómbrelo a BOTONES.
17.- Regrese al último frame y cambie la propiedad layout datablock a BOTONES.
18.- Ubique tres botones en el bloque BOTONES y cambie los nombres y etiquetas a ACEPTAR, OTRO, SALIR, respectivamente.
19.- Con clic derecho sobre el botón ACEPTAR elija Smart trigger WHEN-BUTTON-PRESSED
20.- en la ventana de PL/SQL digite:
DECLARE
CURSOR C1 IS
SELECT NOMBRES, APELLIDOS, SUELDO
FROM EMPLEADO
WHERE NUM_DEP = :DEPARTAMENTOS.NUM_DEP;
BEGIN
SELECT NOMBRE_DEP INTO :DEPARTAMENTOS.NOMBRE_DEP
FROM DEPARTAMENTOS
WHERE NUM_DEP = :DEPARTAMENTOs.NUM_DEP;
OPEN C1;
GO_BLOCK ('EMPLEADO');
FIRST_RECORD;
LOOP
FETCH C1 INTO
:EMPLEADO.NOMBRES,
:EMPLEADO.APELLIDOS,
:EMPLEADO.SUELDO ;
NEXT_RECORD;
EXIT WHEN C1%NOTFOUND;
END LOOP;
CLOSE C1;
GO_BLOCK ('BOTONES');
GO_ITEM ('BOTONES.OTRO');
EXCEPTION
WHEN NO_DATA_FOUND THEN
MESSAGE ('NO HAY ESTE DEPARTAMENTO');
RAISE FORM_TRIGGER_FAILURE;
WHEN OTHERS THEN
MESSAGE ('OTRO DEPARTAMENTO');
END;
21.- En forma similar digite el siguiente código para el botón OTRO en el disparador
WHEN-BUTTON-PRESSED
DECLARE
VERDAD CHAR (1);
BEGIN
GO_BLOCK ('DEPARTAMENTOS');
:DEPARTAMENTOS.NUM_DEP := '';
:DEPARTAMENTOS.NOMBRE_DEP := '';
VERDAD := 'V';
GO_BLOCK ('EMPLEADO');
FIRST_RECORD;
WHILE VERDAD = 'V' LOOP
:EMPLEADO.NOMBRES := '';
:EMPLEADO.APELLIDOS:= '';
:EMPLEADO.SUELDO := '';
NEXT_RECORD;
IF :EMPLEADO.NOMBRES IS NULL THEN
EXIT;
END IF;
END LOOP;
GO_BLOCK ('DEPARTAMENTOS');
GO_ITEM('DEPARTAM,ENTO.NUM_DEP');
EXCEPTION
WHEN OTHERS THEN
RAISE FORM_TRIGGER_FAILURE;
END;
22.- Para el botón SALIR en el disparador WHEN-BUTTON-PRESSED
digite
EXIT_FORM;
23.- Almacene el formulario y ejecútelo.
ACTIVIDAD 8.- Construcción de aplicación Menús. Antes de realizar esta actividad debe tener un diseño de menú tipo barra con las opciones, niveles y objetos que serán llamados en cada uno de los últimos niveles del menú.
1.- Inicie el Forms como es usual.
2.- En el asistente presione Cancel para salir al árbol de navegación.
3.- Conéctese a la Bdd si aún no lo está
4.- en el árbol de navegación elija Menú y Crear.
5.- Cambie el nombre del modulo por defecto a PRINCIPAL
6.- En la barra de herramientas elija Editor de menús
7.- Complete los espacios en cada uno de los bloques que le presenta el editor. Utilice los íconos para desplazamiento tanto vertical como horizontal.
8.- En cada uno de los últimos niveles codifique las llamadas a los objetos requeridos. Por ejemplo: En Salir: EXIT_FORM;
En Consulta, Departamentos: CALL_FORM(‘C:\FORMULARIOS\FORMULARIO01’);
En Consulta, Empleados: CALL_FORM(‘C:\FORMULARIOS\FORMULARIO07’);
9.- Almacene el menú
10.- Compile al menú con Archivo, Administración, Compilar.
11.- Cree un nuevo formulario y cambie el nombre a INICIO
12.- En las propiedades del formulario en Modulo de Menú, reemplace el menú por defecto por C:\FORMULARIOS\PRINCIPAL
13.- Compile el formulario INICIO como es usual.
14.- Cree un enlace de arranque para el formulario INICIO semejante a la Actividad 6.
ACTIVIDAD 9.- Generación de Reportes.
1.- Arranque el utilitario Reports y siga las indicaciones del Asistente
2.- Conéctese como es usual a la Bdd
3.- Elija la tabla DEPARTAMENTOS
4.- Siga con las indicaciones del Asistente hasta llegar a la ejecución del reporte.
5.- Almacene el reporte con File, Save As como REPORTE01.
ACTIVIDAD 10.- Inclusión de reportes en el menú.
1.- Edite el menú PRINCIPAL, y añada una opción de Reportes y una subopción Departamentos.
2.- En el campo de edición de PL/SQL digite:
DECLARE
PARAMETROS paramlist;
BEGIN
PARAMETROS := NULL;
RUN_PRODUCT(REPORTS,'C:\FORMULARIOS\REPORTE01',
SYNCHRONOUS, RUNTIME, FILESYSTEM, PARAMETROS, NULL);
END;
2.- Compile el menú PRINCIPAL
4.- Compile el formulario INICIO.
5.- Ejecute la aplicación desde el ícono de Windows creado en la ACTIVIDAD 8.
ACTIVIDAD 11.- Creación de Alertas.
1.- En el árbol de navegación elija Alerts, nueva alerta
2.- En Propiedes cambie el Nombre a Alerta1
3.- Elija el Estilo (Stop, Caution, Note)
4.- En Message, digite un mensaje adecuado
6.- En un evento adecuado de un objeto codifique:
DECLARE
A NUMBER;
BEGIN
RETORNO NUMBER;
RETORNO := SHOW_ALERT (‘ALERTA1’);
IF RETORNO = ALERT_BUTTON1 THEN
A := 1;
END IF;
END;
6. Ejecute el formulario.
ACTIVIDAD 12.- Reportes con parámetros:
1.- En el objeto que llama al reporte codifique
DECLARE
A PARAMLIST;
BEGIN
A := NULL;
A := CREATE_PARAMETER_LIST('DATOS');
ADD_PARAMETER(A,'DATO',TEXT_PARAMETER,:B2.NUM_DEP);
-- Colocar más ADD_PARAMETER para otros parámetros
RUN_PRODUCT (REPORTS,'C:\FORMULARIOS\REPORTE02',
ASYNCHRONOUS,RUNTIME,FILESYSTEM,A,NULL);
END;
Notas: El reporte debe estar creado con un parámetro de ingreso, ej :DATO
En el formulario de llamada debe estar definido el campo con el parámetro, ej. :B2.NUM_DEP.
Se puede pasar cualquier número de parámetros.
Referencias: ORACLE, Forms Builder
ORACLE, Reports Builder
ORACLE, PL/SQL User Guide
Tablas empleadas en este laboratorio:
CREATE TABLE DEPARTAMENTOS
(NUM_DEP NUMBER CHECK (NUM_DEP > 0),
NOMBRE_DEP CHAR (20),
LOCALIDAD CHAR (25),
CONSTRAINT PK_DEPARTA PRIMARY KEY (NUM_DEP));
CREATE TABLE EMPLEADOS
(NUM_EMP CHAR (4),
NOMBRES CHAR (20),
APELLIDOS CHAR (20),
CARGO CHAR (20),
JEFE,
FECHA_INGRESO DATE,
FECHA_NACIMIENTO DATE,
SUELDO NUMBER CHECK (SUELDO > 0),
CARGAS NUMBER CHECK (CARGAS >= 0),
NUM_DEP,
CONSTRAINT PK_EMPLEADO PRIMARY KEY (NUM_EMP),
CONSTRAINT FK_DEPARTA FOREIGN KEY (NUM_DEP)
REFERENCES DEPARTAMENTOS (NUM_DEP),
CONSTRAINT FK_EMPLEADO FOREIGN KEY (JEFE)
REFERENCES EMPLEADOS (NUM_EMP));
INSERT INTO DEPARTAMENTOS VALUES
(1, ‘GERENCIA’,’CENTRO’);
INSERT INTO DEPARTAMENTOS VALUES
(2, ‘FINANCIERO’,’NORTE’);
INSERT INTO DEPARTAMENTOS VALUES
(3, ‘PERSONAL’,’SUR’);
INSERT INTO DEPARTAMENTOS VALUES
(4, ‘PRODUCCION’,’VALLES’);
ACTIVIDAD PREVIA: Cree un directorio con el nombre FORMULARIOS.
ACTIVIDAD 1.- Creación de un formulario para consulta de datos de DEPARTAMENTOS.
1.- Arranque el Form Builder como es usual
2.- Active Use datablock wizard, OK
3.- Welcome, Next
4.- Active Table or View, Next
5.- En Browse, conéctese al servidor Oracle con su UID, PASS y Cadena de conexión, connect
6.- Elija de la lista la tabla DEPARTAMENTOS
7.- Pase al costado derecho todos los campos de la tabla DEPARTAMENTOS, Next
8.- Active Create data block, Finísh.
9.- En Welcome to the Layout Wizard, Next, Next, Next
10.-Pase nuevamente los campos a la derecha, Next
11.- En la Columna Promt., cambie los nombres de los campos por otros más significativos, ej. Num_dep a Departamento.
Cuando haya terminado, Next
12.- Elija Form, Next
13.- En el espacio para el nombre del Frame ponga DEPARTAMENTOS, Next
14.- En Congratulations!, Finish.
15.- De un clic en el semáforo
16.- De la barra de menú elija Query, Execute
17.- Utilice las flechas para navegar entre los registros.
18.- De la barra de menú elija Action, Exit.
19.- En el árbol de navegación, cambie MODULO1 por FORMULARIO01
20.- De la barra de menú elija File, Save
21.- Cierre el FORMULARIO01
ACTIVIDAD 2.- Creación de un formulario para consulta de datos de empleados.
1.- Arranque el Form Builder como es usual
2.- Active Use datablock wizard, OK
3.- Welcome, Next
4.- Active Table or View, Next
5.- En Browse, conéctese al servidor Oracle con su UID, PASS y Cadena de conexión, connect
6.- Elija de la lista la tabla EMPLEADOS
7.- Pase al costado derecho todos los campos de la tabla EMPLEADOS, Next
8.- Active Create data block, Finísh.
9.- En Welcome to the Layout Wizard, Next, Next, Next
10.-Pase nuevamente los campos a la derecha, Next
11.- En la Columna Promt., cambie los nombres de los campos por otros más significativos, ej. Num_emp a Número, Num_dep a Departamento.
Cuando haya terminado, Next
12.- Elija Form, Next
13.- En el espacio para el Frame ponga EMPLEADOS, Next
14.- En Congratulations!, Finish.
15.- De un clic en el semáforo
16.- De la barra de menú elija Query, Execute
17.- Utilice las flechas para navegar entre los registros.
18.- De la barra de menú elija Action, Exit.
19.- En el árbol de navegación, cambie MODULO1 por FORMULARIO02
20.- De la barra de menú elija File, Save
21.- Cierre el FORMULARIO02
ACTIVIDAD 3.- Creación de un formulario para ingreso de datos de empleados.
Si no tiene arrancado el Form Builder, repita el paso 1 de la Actividad 1.
En Use Data Block Wizard, presione Cancel.
1.- Si no tiene un Nuevo modulo, active Forms y presione el signo + (De color verde)
2.- Cambie el nombre del módulo a FORMULARIO03.
3.- Active Data blocks y presione el signo + (De color verde)
4.- En New Data Block, elija Build a new data block manually, OK
5.- Cambie el nombre del bloque a DATOS
6.- De un click derecho en FORMULARIO3 y elija Layout Editor
7.- En la pantalla de diseño elija el control Frame, dráguelo hasta la pantalla, dando una amplitud suficiente para los datos de empleados.
8.- De un click derecho sobre el Frame y elija Property Palette
9.- En Layout Data Block elija DATOS
10.- En Frame Title borre el Label
11.- En Background color elija uno que se asemeje al color de fondo del formulario
12.- Elija Data Block y presione el signo + (De color verde)
13.- En New Data Block, elija Build a new data block manually, OK
14.- Cambie el nombre del bloque a BOTONES
15.- En la pantalla de diseño elija el control Frame, dráguelo hasta la pantalla, dando una amplitud suficiente para ubicar tres botones de control.
16.- De un click derecho sobre el Frame y elija Property Palette
17.- En Layout Data Block elija BOTONES
18.- En Frame Title borre el Label
19.- En Background color elija uno que se asemeje al color de fondo del formulario
20.-En el árbol de navegación elija Data base objects, localice su nombre de usuario, elija Tables, EMPLEADOS, Columns.
21.- En la pantalla de diseño elija el control Text item, dráguelo hasta la parte cercana al extremo superior izquierdo.
22.- De click derecho sobre la caja de texto y elija property palette.
23.- En Name cambie a NUM_EMP
24.- Repita los pasos 21, 22 y 23 para cada una de las columnas de la tabla EMPLEADOS
En el campo FECHA_NACIMIENTO en la propiedad Data Type elija Date, en la propiedad Format Mask digite MM/DD/YYYY
Realice lo mismo para el campo FECHA_INGRESO.
25.- Active la primera caja de texto y en property palette, localice PROMPT.
26.- Cambie el prompt a una frase o nombre significativo para cada caja de texto. Por ej. Para NUM_EMP Número, para FECHA_NACIMIENTO Fecha de nacimiento.
27.- Repita los pasos 25 y 26 para cada una de las cajas de texto.
28.- Revise el árbol de navegación. En el bloque DATOS revise que estén todos los nombres de los campos de la tabla EMPLEADOS.
29.- Active el bloque BOTONES
30.- En la pantalla de diseño elija el control BUTTON, dráguelo hasta el frame de botones
31.- En property palette, cambie el nombre del botón a Ingresar, en Label Ingresar
32.- Repita los pasos 30 y 31 para dos nuevos botones llamados Otro y Salir.
33.- De un click derecho sobre el botón Salir y elija Smart Trigger, WHEN-BUTTON-PRESSED
34.- En la pantalla de edición de código digite EXIT_FORM;
35.- Presione COMPILE y verifique el resultado.
36.- Si obtuvo Succesfully compiled, elija Close, de lo contrario corrija lo errado y repita el paso 35.-
37.- En la pantalla de diseño presione el semáforo.
38.- En la pantalla de ejecución presione el botón Salir. La aplicación deberá terminar y regresar a la pantalla de diseño.
39.- Repita los pasos 33, 34, 35, y 36 para el botón INGRESAR pero cambiando el código por lo siguiente:
BEGIN
INSERT INTO EMPLEADOS
(NUM_EMP, APELLIDOS, NOMBRES, FECHA_NACIMIENTO,
CARGO, FECHA_INGRESO, JEFE, SUELDO, CARGAS, NUM_DEP)
VALUES
(:DATOS.NUM_EMP, :DATOS.APELLIDOS, :DATOS.NOMBRES,
:DATOS.FECHA_NACIMIENTO,
:DATOS.CARGO, :DATOS.FECHA_INGRESO, :DATOS.JEFE,
:DATOS.SUELDO, :DATOS.CARGAS, :DATOS.NUM_DEP);
COMMIT;
END;
40.- Repita los pasos 33, 34, 35, y 36 para el botón OTRO pero cambiando el código por lo siguiente:
BEGIN
GO_BLOCK (‘DATOS’);
:DATOS.NUM_EMP := ‘’;
:DATOS.APELLIDOS := ‘’;
:DATOS.NOMBRES := ‘’;
:DATOS.FECHA_NACIMIENTO := ‘’;
:DATOS.CARGO := ‘’;
:DATOS.FECHA_INGRESO := ‘’;
:DATOS.JEFE := ‘’;
:DATOS.SUELDO := ‘’;
:DATOS.CARGAS := ‘’;
:DATOS.NUM_DEP := ‘’;
GO_ITEM (‘:DATOS.NUM_EMP’);
END;
41.- En la pantalla de diseño presione el semáforo.
42.- En la ventana de ejecución presione el botón Salir.
43.- Repita el paso 41 y 42, pero esta vez presione el botón Otro.
44.- Ingrese datos en cada uno de los campos y presione el botón Ingresar.
45.- Pruebe con los botones Otro y finalmente Salir.
ACTIVIDAD 4.- Incorporación de listas de valores (LOVs) para el ingreso de datos.
Debe tener abierta la pantalla de diseño del FORMULARIO03 construido en la Actividad 3.
1.- En el árbol de navegación elija LOVs y presione el + (De color verde)
2.- Seleccione Use LOV wizard, Next
3.- Seleccione New record Group base on a Query, Next
4.- En el espacio de edición de SQL digite
SELECT NUM_EMP, APELLIDOS
FROM EMPLEADO
ORDER BY 1
5.- Presione Check sintax. Si hay errores corríjalos. Next
6.- Pase los dos campos a la derecha, Next
7.- Edite los títulos de los campos si desea, Next
8.- Ponga el título Jefes, Next
9.- En Retrieve ponga 5, Next, Next, Next, Finísh.
10.- Cambie el LOV1 a JEFES. Lo mismo en Record groups a JEFES.
11.- De click derecho en el LOV JEFES y elija property palette.
12.- En Column Mapping Properties, elija NUM_EMP
13.- En Browse elija DATOS.JEFE, OK, OK
14.- En la pantalla de diseño elija el campo JEFE
15.- En propiedades para JEFE, en List of Values elija el LOV JEFES.
16.- Repita los pasos 1 al 15 para generar una lista de departamentos, pero en el paso 4. digite
SELECT NUM_DEP, NOMBRE_DEP
FROM DEPARTAMENTOS
ORDER BY 1
En el paso 10.- cambie el LOVx a DEPARTAMENTOS
Realice los demás pasos en forma coherente con la información de los departamentos.
17.- Ejecute el FORMULARIO03. Ingrese los datos, pero al llegar al campo JEFE presione la tecla F9. Elija un jefe de la lista, OK.
Igual para el campo NUM_DEP.
ACTIVIDAD 5.- Incorporación de verificaciones previas en los datos y chequeo de errores.
1.- Guarde el FORMULARIO03 con File, Save,
2.- Gurde nuevamente el FORMULARIO03 pero esta vez con File, Save As FORMULARIO04.
3.- En el árbol de navegación cambie el nombre FORMULARIO03 por FORMULARIO04.
3.- Con click derecho active la pantalla de diseño, si aun no estaba activa.
4.- De click derecho sobre el botón Ingresar, elija Smart triggers, When-Button-pressed
5.- En la ventana de edición digite:
DECLARE
FALTAN_DATOS EXCEPTION;
BEGIN
/* VERIFICACIÓN DE QUE NO HAYA CAMPOS EN BLANCO */
IF :DATOS.NUM_EMP IS NULL OR
:DATOS.APELLIDOS IS NULL OR
:DATOS.NOMBRES IS NULL OR
:DATOS.FECHA_NACIMIENTO IS NULL OR
:DATOS.CARGO IS NULL OR
:DATOS.FECHA_INGRESO IS NULL OR
:DATOS.JEFE IS NULL OR
:DATOS.SUELDO IS NULL OR
:DATOS.NUM_DEP IS NULL THEN
RAISE FALTAN_DATOS;
IF :DATOS.CARGAS IS NULL THEN
:DATOS.CARGAS := 0;
END IF;
END IF;
INSERT INTO EMPLEADOS
(NUM_EMP, APELLIDOS, NOMBRES, FECHA_NACIMIENTO,
CARGO, FECHA_INGRESO, JEFE, SUELDO, CARGAS, NUM_DEP)
VALUES
(:DATOS.NUM_EMP, :DATOS.APELLIDOS, :DATOS.NOMBRES,
:DATOS.FECHA_NACIMIENTO,
:DATOS.CARGO, :DATOS.FECHA_INGRESO, :DATOS.JEFE,
:DATOS.SUELDO, :DATOS.CARGAS, :DATOS.NUM_DEP);
COMMIT_FORM;
EXCEPTION
WHEN FALTAN_DATOS THEN
MESSAGE ('Faltan datos, revise');
RAISE Form_Trigger_Failure;
WHEN DUP_VAL_ON_INDEX THEN
MESSAGE ('Ya existe este registro: '|| SQLERRM);
RAISE Form_Trigger_Failure;
WHEN OTHERS THEN
MESSAGE ('Hay errores: '|| SQLCODE || ' '|| SQLERRM);
RAISE Form_Trigger_Failure;
END;
ACTIVIDAD 6.- Ejecución de aplicaciones desde la consola.
1.- De clic derecho en la pantalla de Windows
2.- Nuevo, Acceso directo
3.- En examinar localice el ejecutable IFRUN60.EXE
4.-Aceptar
5.- En el casillero de edición complete con el path del módulo ejecutable de la aplicación por ej.:
C:\Dev6i\BIN\ifrun60.EXE MODULE=C:\FORMULARIOS\DEPARTAMENTOS
6.- Complete los requerimientos que se le solicitan aceptando los valores por defecto.
7.- Para ejecutar la aplicación de doble click en el ícono creado en la pantalla.
ACTIVIDAD 7.- Construcción de aplicación Master – Detail con ingreso de valor de consulta
1.- Inicie el Forms como es usual.
2.- En el asistente presione Cancel para salir al árbol de navegación.
3.- Cambie MODULE1 por FORMULARIO5
4.- Con clic derecho en FORMULARIO5, elija Layout Editor
5.- Ubique un Frame en la parte superior de la pantalla de diseño y cambie las propiedades para tener una apariencia agradable.
6.- En data blocas elija nuevo, y manualmente, Ok
7.- Cambie la denominación del bloque a DEPARTAMENTOS
8.- Regrese a las propiedades del frame y en layout datablock elija DEPARTAMENTOS,
9.- Ubique el frame dos cajas de texto y cambie los nombres a NUM_DEP y NOMBRRE_DEP
10.-Cree un nuevo frame en la parte inferior del primero, dando una amplitud suficiente para que quepan unos cinco registros horizontalmente.
11.- Cree un nuevo bloque y cambie el nombre a EMPLEADOS
12.- Regrese al último frame y cambie la propiedad layout datablock a EMPLEADOS
13.- En el bloque EMPLEADOS cambie la propiedad Records displayed a 5
14. En el frame ubique tres cajas de texto y cambie los nombres a NOMBRE, APELLIDOS, SUELDO
15.- Ubique un nuevo frame en la parte inferior con suficiente amplitud para dar cabida a tres botones.
16.- Cree un nuevo bloque y renómbrelo a BOTONES.
17.- Regrese al último frame y cambie la propiedad layout datablock a BOTONES.
18.- Ubique tres botones en el bloque BOTONES y cambie los nombres y etiquetas a ACEPTAR, OTRO, SALIR, respectivamente.
19.- Con clic derecho sobre el botón ACEPTAR elija Smart trigger WHEN-BUTTON-PRESSED
20.- en la ventana de PL/SQL digite:
DECLARE
CURSOR C1 IS
SELECT NOMBRES, APELLIDOS, SUELDO
FROM EMPLEADO
WHERE NUM_DEP = :DEPARTAMENTOS.NUM_DEP;
BEGIN
SELECT NOMBRE_DEP INTO :DEPARTAMENTOS.NOMBRE_DEP
FROM DEPARTAMENTOS
WHERE NUM_DEP = :DEPARTAMENTOs.NUM_DEP;
OPEN C1;
GO_BLOCK ('EMPLEADO');
FIRST_RECORD;
LOOP
FETCH C1 INTO
:EMPLEADO.NOMBRES,
:EMPLEADO.APELLIDOS,
:EMPLEADO.SUELDO ;
NEXT_RECORD;
EXIT WHEN C1%NOTFOUND;
END LOOP;
CLOSE C1;
GO_BLOCK ('BOTONES');
GO_ITEM ('BOTONES.OTRO');
EXCEPTION
WHEN NO_DATA_FOUND THEN
MESSAGE ('NO HAY ESTE DEPARTAMENTO');
RAISE FORM_TRIGGER_FAILURE;
WHEN OTHERS THEN
MESSAGE ('OTRO DEPARTAMENTO');
END;
21.- En forma similar digite el siguiente código para el botón OTRO en el disparador
WHEN-BUTTON-PRESSED
DECLARE
VERDAD CHAR (1);
BEGIN
GO_BLOCK ('DEPARTAMENTOS');
:DEPARTAMENTOS.NUM_DEP := '';
:DEPARTAMENTOS.NOMBRE_DEP := '';
VERDAD := 'V';
GO_BLOCK ('EMPLEADO');
FIRST_RECORD;
WHILE VERDAD = 'V' LOOP
:EMPLEADO.NOMBRES := '';
:EMPLEADO.APELLIDOS:= '';
:EMPLEADO.SUELDO := '';
NEXT_RECORD;
IF :EMPLEADO.NOMBRES IS NULL THEN
EXIT;
END IF;
END LOOP;
GO_BLOCK ('DEPARTAMENTOS');
GO_ITEM('DEPARTAM,ENTO.NUM_DEP');
EXCEPTION
WHEN OTHERS THEN
RAISE FORM_TRIGGER_FAILURE;
END;
22.- Para el botón SALIR en el disparador WHEN-BUTTON-PRESSED
digite
EXIT_FORM;
23.- Almacene el formulario y ejecútelo.
ACTIVIDAD 8.- Construcción de aplicación Menús. Antes de realizar esta actividad debe tener un diseño de menú tipo barra con las opciones, niveles y objetos que serán llamados en cada uno de los últimos niveles del menú.
1.- Inicie el Forms como es usual.
2.- En el asistente presione Cancel para salir al árbol de navegación.
3.- Conéctese a la Bdd si aún no lo está
4.- en el árbol de navegación elija Menú y Crear.
5.- Cambie el nombre del modulo por defecto a PRINCIPAL
6.- En la barra de herramientas elija Editor de menús
7.- Complete los espacios en cada uno de los bloques que le presenta el editor. Utilice los íconos para desplazamiento tanto vertical como horizontal.
8.- En cada uno de los últimos niveles codifique las llamadas a los objetos requeridos. Por ejemplo: En Salir: EXIT_FORM;
En Consulta, Departamentos: CALL_FORM(‘C:\FORMULARIOS\FORMULARIO01’);
En Consulta, Empleados: CALL_FORM(‘C:\FORMULARIOS\FORMULARIO07’);
9.- Almacene el menú
10.- Compile al menú con Archivo, Administración, Compilar.
11.- Cree un nuevo formulario y cambie el nombre a INICIO
12.- En las propiedades del formulario en Modulo de Menú, reemplace el menú por defecto por C:\FORMULARIOS\PRINCIPAL
13.- Compile el formulario INICIO como es usual.
14.- Cree un enlace de arranque para el formulario INICIO semejante a la Actividad 6.
ACTIVIDAD 9.- Generación de Reportes.
1.- Arranque el utilitario Reports y siga las indicaciones del Asistente
2.- Conéctese como es usual a la Bdd
3.- Elija la tabla DEPARTAMENTOS
4.- Siga con las indicaciones del Asistente hasta llegar a la ejecución del reporte.
5.- Almacene el reporte con File, Save As como REPORTE01.
ACTIVIDAD 10.- Inclusión de reportes en el menú.
1.- Edite el menú PRINCIPAL, y añada una opción de Reportes y una subopción Departamentos.
2.- En el campo de edición de PL/SQL digite:
DECLARE
PARAMETROS paramlist;
BEGIN
PARAMETROS := NULL;
RUN_PRODUCT(REPORTS,'C:\FORMULARIOS\REPORTE01',
SYNCHRONOUS, RUNTIME, FILESYSTEM, PARAMETROS, NULL);
END;
2.- Compile el menú PRINCIPAL
4.- Compile el formulario INICIO.
5.- Ejecute la aplicación desde el ícono de Windows creado en la ACTIVIDAD 8.
ACTIVIDAD 11.- Creación de Alertas.
1.- En el árbol de navegación elija Alerts, nueva alerta
2.- En Propiedes cambie el Nombre a Alerta1
3.- Elija el Estilo (Stop, Caution, Note)
4.- En Message, digite un mensaje adecuado
6.- En un evento adecuado de un objeto codifique:
DECLARE
A NUMBER;
BEGIN
RETORNO NUMBER;
RETORNO := SHOW_ALERT (‘ALERTA1’);
IF RETORNO = ALERT_BUTTON1 THEN
A := 1;
END IF;
END;
6. Ejecute el formulario.
ACTIVIDAD 12.- Reportes con parámetros:
1.- En el objeto que llama al reporte codifique
DECLARE
A PARAMLIST;
BEGIN
A := NULL;
A := CREATE_PARAMETER_LIST('DATOS');
ADD_PARAMETER(A,'DATO',TEXT_PARAMETER,:B2.NUM_DEP);
-- Colocar más ADD_PARAMETER para otros parámetros
RUN_PRODUCT (REPORTS,'C:\FORMULARIOS\REPORTE02',
ASYNCHRONOUS,RUNTIME,FILESYSTEM,A,NULL);
END;
Notas: El reporte debe estar creado con un parámetro de ingreso, ej :DATO
En el formulario de llamada debe estar definido el campo con el parámetro, ej. :B2.NUM_DEP.
Se puede pasar cualquier número de parámetros.
Referencias: ORACLE, Forms Builder
ORACLE, Reports Builder
ORACLE, PL/SQL User Guide
BDDM: Laboratorio 9
FUNCIONES ANALITICAS OLAP
Consultas previas: Funciones Analiticas Olap de Oracle (Objetivo de cada una, formato Sql, ejemplos de uso. No incluya CUBE, ROLLAP, DECORE, GROUPING. Al menos dos páginas).
Actividades:
Ejecute las consultas siguientes y analice los resultados:
1.) RANQUEO DE VALORES
CIUDADES rankeadas por RENTA
select ciudad, renta, rownum
from
(select ciudad, sum (h.renta) renta
from hechos h, d_branch b
where h.branch= b.bno
group by ciudad
order by 2 desc);
2) REGION/ TIPO rankeado por renta para el año 2004
column renta format 99,999,999.99
select
t1.REGION, t2.TIPO, sum(t3.renta) renta,
rank() over (order by sum(t3.renta) desc) orden
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO=t3.BRANCH
and
t2.INO=t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by
t1.REGION, t2.TIPO;
select sum (renta) renta
from hechos h, d_tiempo t
where h.fecha = t.fecha
and anio = 2004;
3) REGION/ TIPO rankeado por PROMEDIO DE MES para el año 2004
Select t1.REGION, t2.TIPO, avg(t4.MES) MES,
rank() over (order by avg(t4.MES) desc) orden
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO=t3.BRANCH
and
t2.INO=t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by
t1.REGION, t2.TIPO;
4) REGION/ TIPO rankeado particionado de la renta para el año 2004
Select t1.REGION, t2.TIPO, sum(t3.renta) renta,
rank() over (partition by t1.REGION order by sum(t3.renta) desc) rango
from
d_branch t1, d_INMUEBLE t2, d_tiempo t4, hechos t3
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by
t1.REGION, t2.TIPO;
5) TIPO / REGIONrankeado particionado del renta para el año 2004
Select t2.TIPO, t1.REGION, sum(t3.renta) renta,
rank() over (partition by t2.TIPO order by sum(t3.renta) desc) rango
from
d_branch t1, d_INMUEBLE t2, d_tiempo t4, hechos t3
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by t2.TIPO, t1.REGION;
Funciones similares a rank (): dense_rank(), percent_rank() cume_dist()
FUNCIONES DE INTERVALOS
6) RENTAS POR REGIONY TIPOs ORDENADAS POR MES
Select t1.REGION, t2.TIPO, t4.mes, t3.renta renta,
sum(t3.renta) over (partition by t1.REGION, t2.TIPO
order by t4.mes rows unbounded preceding) actual
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
and trimestre = 1;
7) Numero de rentas por región, TIPO ordenados por mes.
Select t1.REGION, t2.TIPO, t4.mes,
count (t3.renta) over (partition by t1.REGION, t2.TIPO
order by t4.mes rows unbounded preceding) total
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
and trimestre = 1;
8) Suma progresiva en intervalos de tres MES
Select t1.REGION, t2.TIPO, t4.mes, t3.renta,
sum(t3.renta) over (partition by t1.REGION, t2.TIPO
order by t4.mes rows 2 preceding) progresivo
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO =t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.mes = 1
and
rtrim (TIPO) = 'VILLA';
9) Suma progresiva centrada en intervalos de tres MES
Select t1.REGION, t2.TIPO, t4.mes, t3.renta,
sum(t3.renta) over (partition by t1.REGION, t2.TIPO
order by t4.mes rows between 1 preceding and 1 following) progresivo
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio=2004
and
t4.semestre = 1;
10) Valor máximo de renta mensual por REGIONy TIPO (todos los MES)
Select t1.REGION, t2.TIPO, t4.mes, t3.renta,
max(t3.renta) over (partition by t1.REGION, t2.TIPO)
maximo
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
and
t4.semestre = 1;
11) Valor máximo de renta mensual por REGIONy TIPO (Solo el máximo)
select distinct REGION, TIPO, mes, mensual, maximo
from
(select t1.REGION, t2.TIPO, t4.mes, t3.renta mensual,
max(t3.renta) over (partition by t1.REGION, t2.TIPO) maximo
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004)
where
mensual = maximo
order by REGION, TIPO, mes;
Ratio_to_report:
12) Relación de rentas por REGIONy TIPO para las rentas por REGION.
Select t1.REGION, t2.TIPO, sum(t3.renta),
sum(sum(t3.renta)) over (partition by t1.REGION) REGION_total,
ratio_to_report(sum(t3.renta)) over (partition by t1.REGION) REGION_ratio
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO =t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by t1.REGION, t2.TIPO;
13) Relación de rentas por REGIONy TIPO para las rentas totales.
Select t1.REGION, t2.TIPO, sum(t3.renta),
sum(sum(t3.renta)) over () REGION_total,
ratio_to_report(sum(t3.renta)) over () REGION_ratio
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO =t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by t1.REGION, t2.TIPO;
14) rentas anuales de un año comparadas con el año anterior.
Select t1.REGION, t2.TIPO, t4.anio,
sum(t3.renta) anual,
sum(t3.renta) - lag(sum(t3.renta),1) over (partition by t1.REGION,
t2.TIPO
order by t4.anio) diferencia
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
group by
t1.REGION, t2.TIPO, t4.anio;
Consultas previas: Funciones Analiticas Olap de Oracle (Objetivo de cada una, formato Sql, ejemplos de uso. No incluya CUBE, ROLLAP, DECORE, GROUPING. Al menos dos páginas).
Actividades:
Ejecute las consultas siguientes y analice los resultados:
1.) RANQUEO DE VALORES
CIUDADES rankeadas por RENTA
select ciudad, renta, rownum
from
(select ciudad, sum (h.renta) renta
from hechos h, d_branch b
where h.branch= b.bno
group by ciudad
order by 2 desc);
2) REGION/ TIPO rankeado por renta para el año 2004
column renta format 99,999,999.99
select
t1.REGION, t2.TIPO, sum(t3.renta) renta,
rank() over (order by sum(t3.renta) desc) orden
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO=t3.BRANCH
and
t2.INO=t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by
t1.REGION, t2.TIPO;
select sum (renta) renta
from hechos h, d_tiempo t
where h.fecha = t.fecha
and anio = 2004;
3) REGION/ TIPO rankeado por PROMEDIO DE MES para el año 2004
Select t1.REGION, t2.TIPO, avg(t4.MES) MES,
rank() over (order by avg(t4.MES) desc) orden
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO=t3.BRANCH
and
t2.INO=t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by
t1.REGION, t2.TIPO;
4) REGION/ TIPO rankeado particionado de la renta para el año 2004
Select t1.REGION, t2.TIPO, sum(t3.renta) renta,
rank() over (partition by t1.REGION order by sum(t3.renta) desc) rango
from
d_branch t1, d_INMUEBLE t2, d_tiempo t4, hechos t3
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by
t1.REGION, t2.TIPO;
5) TIPO / REGIONrankeado particionado del renta para el año 2004
Select t2.TIPO, t1.REGION, sum(t3.renta) renta,
rank() over (partition by t2.TIPO order by sum(t3.renta) desc) rango
from
d_branch t1, d_INMUEBLE t2, d_tiempo t4, hechos t3
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by t2.TIPO, t1.REGION;
Funciones similares a rank (): dense_rank(), percent_rank() cume_dist()
FUNCIONES DE INTERVALOS
6) RENTAS POR REGIONY TIPOs ORDENADAS POR MES
Select t1.REGION, t2.TIPO, t4.mes, t3.renta renta,
sum(t3.renta) over (partition by t1.REGION, t2.TIPO
order by t4.mes rows unbounded preceding) actual
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
and trimestre = 1;
7) Numero de rentas por región, TIPO ordenados por mes.
Select t1.REGION, t2.TIPO, t4.mes,
count (t3.renta) over (partition by t1.REGION, t2.TIPO
order by t4.mes rows unbounded preceding) total
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
and trimestre = 1;
8) Suma progresiva en intervalos de tres MES
Select t1.REGION, t2.TIPO, t4.mes, t3.renta,
sum(t3.renta) over (partition by t1.REGION, t2.TIPO
order by t4.mes rows 2 preceding) progresivo
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO =t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.mes = 1
and
rtrim (TIPO) = 'VILLA';
9) Suma progresiva centrada en intervalos de tres MES
Select t1.REGION, t2.TIPO, t4.mes, t3.renta,
sum(t3.renta) over (partition by t1.REGION, t2.TIPO
order by t4.mes rows between 1 preceding and 1 following) progresivo
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio=2004
and
t4.semestre = 1;
10) Valor máximo de renta mensual por REGIONy TIPO (todos los MES)
Select t1.REGION, t2.TIPO, t4.mes, t3.renta,
max(t3.renta) over (partition by t1.REGION, t2.TIPO)
maximo
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
and
t4.semestre = 1;
11) Valor máximo de renta mensual por REGIONy TIPO (Solo el máximo)
select distinct REGION, TIPO, mes, mensual, maximo
from
(select t1.REGION, t2.TIPO, t4.mes, t3.renta mensual,
max(t3.renta) over (partition by t1.REGION, t2.TIPO) maximo
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004)
where
mensual = maximo
order by REGION, TIPO, mes;
Ratio_to_report:
12) Relación de rentas por REGIONy TIPO para las rentas por REGION.
Select t1.REGION, t2.TIPO, sum(t3.renta),
sum(sum(t3.renta)) over (partition by t1.REGION) REGION_total,
ratio_to_report(sum(t3.renta)) over (partition by t1.REGION) REGION_ratio
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO =t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by t1.REGION, t2.TIPO;
13) Relación de rentas por REGIONy TIPO para las rentas totales.
Select t1.REGION, t2.TIPO, sum(t3.renta),
sum(sum(t3.renta)) over () REGION_total,
ratio_to_report(sum(t3.renta)) over () REGION_ratio
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO =t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
and
t4.anio = 2004
group by t1.REGION, t2.TIPO;
14) rentas anuales de un año comparadas con el año anterior.
Select t1.REGION, t2.TIPO, t4.anio,
sum(t3.renta) anual,
sum(t3.renta) - lag(sum(t3.renta),1) over (partition by t1.REGION,
t2.TIPO
order by t4.anio) diferencia
from
d_branch t1, d_INMUEBLE t2, hechos t3, d_tiempo t4
where
t1.BNO = t3.BRANCH
and
t2.INO = t3.INMUEBLE
and
t4.fecha = t3.fecha
group by
t1.REGION, t2.TIPO, t4.anio;
martes 12 de mayo de 2009
BDDM: Laboratorio 8
USO DE HERRAMIENTAS OLAP
Imprima esta Hoja – guía.
Actividades:
1.- Ejecute la consulta
CREATE VIEW RENTA_A_REGION
AS
SELECT SUM (RENTA) RENTA, ANIO,
REGION
FROM HECHOS H, D_BRANCH S, D_TIEMPO T
WHERE H.BRANCH = S.BNO
AND H.FECHA = T.FECHA
AND ANIO BETWEEN ‘2001’ AND ‘2004’
GROUP BY ANIO, REGION
ORDER BY 2, 3;
2.- Ejecute la consulta
CREATE VIEW CUBE_RENTA_A_REGION
AS
SELECT SUM (RENTA) RENTA, ANIO,
REGION
FROM HECHOS H, D_BRANCH S, D_TIEMPO T
WHERE H.BRANCH = S.BNO
AND H.FECHA = T.FECHA
AND ANIO BETWEEN ‘2001’ AND ‘2004’
GROUP BY CUBE(ANIO, REGION)
ORDER BY 2, 3;
3.- Ejecute la consulta
CREATE VIEW DECODE_CUBE_RENTA_A_REGION
AS
SELECT SUM (RENTA) RENTA,
DECODE (GROUPING (ANIO ), 1, ‘TODOS LOS AÑOS’,
ANIO) ANIO,
DECODE (GROUPING (REGION), 1, ‘TODAS LAS REGIONES’, REGION) REGION
FROM HECHOS H, D_BRANCH S, D_TIEMPO T
WHERE H.BRANCH = S.BNO
AND H.FECHA = T.FECHA
AND ANIO BETWEEN ‘2001’ AND ‘2004’
GROUP BY CUBE(ANIO, REGION)
ORDER BY 2, 3;
4.- Ejecute la consulta
CREATE VIEW DECODE_ROLLUP_RENTA_A_REGION
AS
SELECT SUM (RENTA) RENTA,
DECODE (GROUPING (ANIO ), 1, ‘TODOS LOS AÑOS’,
ANIO) ANIO,
DECODE (GROUPING (REGION), 1, ‘TODAS LAS REGIONES’, REGION) REGION
FROM HECHOS H, D_BRANCH S, D_TIEMPO T
WHERE H.BRANCH = S.BNO
AND H.FECHA = T.FECHA
AND ANIO BETWEEN ‘2001’ AND ‘2004’
GROUP BY ROLLUP(ANIO, REGION)
ORDER BY 2, 3;
5.- Cree una vista V1
CREATE VIEW PROM_CUBE_DECODE_Q_TIPO
AS
SELECT AVG (DEPOSITO) PROMEDIO,
DECODE (GROUPING ( REGION), 1, ‘TODAS LAS REGIONES’, REGION) REGION,
DECODE (GROUPING (TRIMESTRE), 1, ‘TODOS LOS TRIMESTRE’, TRIMESTRE) TRIMESTRE,
DECODE (GROUPING (TIPO), 1, ‘TODOS LOS TIPOS’, TIPO) TIPO
FROM HECHOS H, D_TIEMPO T, D_INMUEBLE I, D_BRANCH B
WHERE H.FECHA = T.FECHA
AND H.INMUEBLE = I.INO
AND H.BRANCH = B.BNO
AND ANIO = 2004
GROUP BY CUBE (REGION, TRIMESTRE, TIPO);
6.- Cree una vista V2
CREATE VIEW TOTAL_CUBE_DECODE_F_R_S_A
AS
SELECT COUNT (*) TOTAL,
DECODE (GROUPING (FORMA_DE_PAGO), 1, ‘TODAS LAS FORMAS’, FORMA_DE_PAGO) FORMAS,
DECODE (GROUPING (REGION), 1, ‘TODOS LAS REGIONES’, REGION) REGION,
DECODE (GROUPING (ANIO), 1, ‘TODOS LOS ANIOS’, ANIO) ANIO,
DECODE (GROUPING (SEMESTRE), 1, ‘TODOS LOS SEMESTRES’, SEMESTRE) SEMESTRE
FROM HECHOS H, D_TIEMPO T, D_BRANCH B
WHERE H.FECHA = T.FECHA
AND H.BRANCH = B.BNO
AND ANIO BETWEEN 2005 AND 2007
GROUP BY CUBE (FORMA_DE_PAGO, REGION, ANIO, SEMESTRE);
Imprima esta Hoja – guía.
Actividades:
1.- Ejecute la consulta
CREATE VIEW RENTA_A_REGION
AS
SELECT SUM (RENTA) RENTA, ANIO,
REGION
FROM HECHOS H, D_BRANCH S, D_TIEMPO T
WHERE H.BRANCH = S.BNO
AND H.FECHA = T.FECHA
AND ANIO BETWEEN ‘2001’ AND ‘2004’
GROUP BY ANIO, REGION
ORDER BY 2, 3;
2.- Ejecute la consulta
CREATE VIEW CUBE_RENTA_A_REGION
AS
SELECT SUM (RENTA) RENTA, ANIO,
REGION
FROM HECHOS H, D_BRANCH S, D_TIEMPO T
WHERE H.BRANCH = S.BNO
AND H.FECHA = T.FECHA
AND ANIO BETWEEN ‘2001’ AND ‘2004’
GROUP BY CUBE(ANIO, REGION)
ORDER BY 2, 3;
3.- Ejecute la consulta
CREATE VIEW DECODE_CUBE_RENTA_A_REGION
AS
SELECT SUM (RENTA) RENTA,
DECODE (GROUPING (ANIO ), 1, ‘TODOS LOS AÑOS’,
ANIO) ANIO,
DECODE (GROUPING (REGION), 1, ‘TODAS LAS REGIONES’, REGION) REGION
FROM HECHOS H, D_BRANCH S, D_TIEMPO T
WHERE H.BRANCH = S.BNO
AND H.FECHA = T.FECHA
AND ANIO BETWEEN ‘2001’ AND ‘2004’
GROUP BY CUBE(ANIO, REGION)
ORDER BY 2, 3;
4.- Ejecute la consulta
CREATE VIEW DECODE_ROLLUP_RENTA_A_REGION
AS
SELECT SUM (RENTA) RENTA,
DECODE (GROUPING (ANIO ), 1, ‘TODOS LOS AÑOS’,
ANIO) ANIO,
DECODE (GROUPING (REGION), 1, ‘TODAS LAS REGIONES’, REGION) REGION
FROM HECHOS H, D_BRANCH S, D_TIEMPO T
WHERE H.BRANCH = S.BNO
AND H.FECHA = T.FECHA
AND ANIO BETWEEN ‘2001’ AND ‘2004’
GROUP BY ROLLUP(ANIO, REGION)
ORDER BY 2, 3;
5.- Cree una vista V1
CREATE VIEW PROM_CUBE_DECODE_Q_TIPO
AS
SELECT AVG (DEPOSITO) PROMEDIO,
DECODE (GROUPING ( REGION), 1, ‘TODAS LAS REGIONES’, REGION) REGION,
DECODE (GROUPING (TRIMESTRE), 1, ‘TODOS LOS TRIMESTRE’, TRIMESTRE) TRIMESTRE,
DECODE (GROUPING (TIPO), 1, ‘TODOS LOS TIPOS’, TIPO) TIPO
FROM HECHOS H, D_TIEMPO T, D_INMUEBLE I, D_BRANCH B
WHERE H.FECHA = T.FECHA
AND H.INMUEBLE = I.INO
AND H.BRANCH = B.BNO
AND ANIO = 2004
GROUP BY CUBE (REGION, TRIMESTRE, TIPO);
6.- Cree una vista V2
CREATE VIEW TOTAL_CUBE_DECODE_F_R_S_A
AS
SELECT COUNT (*) TOTAL,
DECODE (GROUPING (FORMA_DE_PAGO), 1, ‘TODAS LAS FORMAS’, FORMA_DE_PAGO) FORMAS,
DECODE (GROUPING (REGION), 1, ‘TODOS LAS REGIONES’, REGION) REGION,
DECODE (GROUPING (ANIO), 1, ‘TODOS LOS ANIOS’, ANIO) ANIO,
DECODE (GROUPING (SEMESTRE), 1, ‘TODOS LOS SEMESTRES’, SEMESTRE) SEMESTRE
FROM HECHOS H, D_TIEMPO T, D_BRANCH B
WHERE H.FECHA = T.FECHA
AND H.BRANCH = B.BNO
AND ANIO BETWEEN 2005 AND 2007
GROUP BY CUBE (FORMA_DE_PAGO, REGION, ANIO, SEMESTRE);
lunes 11 de mayo de 2009
BDDD: Laboratorio 8
USUARIOS Y PERFILES
Consultas previas: Capítulo VI del texto, párrafo 6.2 integro, un resumen escrito de una cara.
Premisas: Se han definido tres tipos usuarios para el sistema: Gerente (G), Contador (C) y Secretaria (S).
Como administrador de cada nodo, SYSTEM, se ha concedido a cada usuario permiso para crear otros usuarios dependientes mediante la instrucción:
GRANT CREATE USER TO D{apellido} WITH ADMIN OPTION;
ACTIVIDADES:
1.- Creación de usuarios en el nodo BDDD:
Ingrese al nodo BDDDF8 con su UID y PASSWORD
CREATE USER DG+apellido IDENTIFIED BY DG+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DG+apellido;
CREATE USER DC+apellido IDENTIFIED BY DC+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DC+apellido;
CREATE USER DS+apellido IDENTIFIED BY DS+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DS+apellido;
EXIT;
2.- Creación de usuarios en el nodo ORCL:
Ingrese al nodo ORCL con su UID y PASSWORD
CREATE USER DG+apellido IDENTIFIED BY DG+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DG+apellido;
CREATE USER DC+apellido IDENTIFIED BY DC+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DC+apellido;
CREATE USER DS+apellido IDENTIFIED BY DS+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DS+apellido;
EXIT;
3.- Ingrese al nodo BDDDF8
SELECT * FROM TAB;
Anote la lista de objetos.
4.- Según el perfil de cada uno de los usuarios G, C, S vaya dando los permisos sobre cada uno de los objetos que deben manejar, así por ejemplo, para G
GRANT SELECT ON F2_PRODUCTOS TO DG{apellido};
5.- Ingrese al nodo ORCL y repita los pasos 3 y 4. para cada usuario dependiente.
6.- Ingrese como DG{apellido} al nodo BDDDF8
7.- Consulte los objetos asignados al Gerente
SELECT * FROM D{apellido}.F2_PRODUCTOS;
8.- Cree un sinónimo para ese objeto
CREATE SYNONYM F2_PRODUCTOS FOR D{apellido}.F2_PRODUCTOS;
SELECT * FROM F2_PRODUCTOS.
9.- Repita lo mismo con los demás usuarios y objetos del nodo ORCL.
Consultas previas: Capítulo VI del texto, párrafo 6.2 integro, un resumen escrito de una cara.
Premisas: Se han definido tres tipos usuarios para el sistema: Gerente (G), Contador (C) y Secretaria (S).
Como administrador de cada nodo, SYSTEM, se ha concedido a cada usuario permiso para crear otros usuarios dependientes mediante la instrucción:
GRANT CREATE USER TO D{apellido} WITH ADMIN OPTION;
ACTIVIDADES:
1.- Creación de usuarios en el nodo BDDD:
Ingrese al nodo BDDDF8 con su UID y PASSWORD
CREATE USER DG+apellido IDENTIFIED BY DG+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DG+apellido;
CREATE USER DC+apellido IDENTIFIED BY DC+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DC+apellido;
CREATE USER DS+apellido IDENTIFIED BY DS+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DS+apellido;
EXIT;
2.- Creación de usuarios en el nodo ORCL:
Ingrese al nodo ORCL con su UID y PASSWORD
CREATE USER DG+apellido IDENTIFIED BY DG+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DG+apellido;
CREATE USER DC+apellido IDENTIFIED BY DC+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DC+apellido;
CREATE USER DS+apellido IDENTIFIED BY DS+apellido;
GRANT CONNECT, RESOURCE, CREATE SYNONYM, CREATE VIEW TO DS+apellido;
EXIT;
3.- Ingrese al nodo BDDDF8
SELECT * FROM TAB;
Anote la lista de objetos.
4.- Según el perfil de cada uno de los usuarios G, C, S vaya dando los permisos sobre cada uno de los objetos que deben manejar, así por ejemplo, para G
GRANT SELECT ON F2_PRODUCTOS TO DG{apellido};
5.- Ingrese al nodo ORCL y repita los pasos 3 y 4. para cada usuario dependiente.
6.- Ingrese como DG{apellido} al nodo BDDDF8
7.- Consulte los objetos asignados al Gerente
SELECT * FROM D{apellido}.F2_PRODUCTOS;
8.- Cree un sinónimo para ese objeto
CREATE SYNONYM F2_PRODUCTOS FOR D{apellido}.F2_PRODUCTOS;
SELECT * FROM F2_PRODUCTOS.
9.- Repita lo mismo con los demás usuarios y objetos del nodo ORCL.
Suscribirse a:
Entradas (Atom)