Vous êtes sur la page 1sur 54

UNIVERSIDAD PEDAGOGICA Y TECNOLOGICA DE COLOMBIA

Facultad Ingeniera Ingeniera de Sistemas y Computacin

Modelado, SQL y PL para ORACLE


Jorge E. Quevedo Reyes

2010

ARQUITECTURA DE OBJETOS DEL DBMS

TABLE: Tabla de datos. VIEW: Vista, representacin lgica de columnas de una o varias tablas. Estn sincronizadas tanto la tabla como la vista y se actualizan simultneamente. SYNONYM: Tabla virtual que se le permite crear a un usuario a partir de una tabla real del propietario, el cual, le concede el permiso de usarla. INDEX: ndice que se le crea a una tabla para agilizar operaciones sobre la tabla. Una llave primaria es por defecto un ndice. SNAPSHOTS: Es como una vista pero real o sea fsica. Se desactualiza respecto a la tabla que la crearon. Es como una copia que se le saca a una tabla en un momento dado. SEQUENCE: Secuencia o mecanismo que usa ORACLE para generar una numeracin consecutiva. Este objeto no es tabla. USER: Usuario. TABLESPACES: Divisin lgica de la base de datos en donde se definen los objetos. DATABASE: Base de datos TRIGGERS: Disparadores o subprogramas en PL/ SQL que actual de acuerdo a un evento asociado. PROCEDURE: Procedimiento de programacin, bloque de PL/SQL. FUNCTION: Funcin de programacin, bloque de PL/SQL. PACKAGE: Paquetes que agrupan mdulos de funciones y procedimientos relacionados, bloque de PL/SQL.

BASES DE DATOS Y PLATAFORMAS Las bases de datos se tienen en cuenta segn: Arquitectura del procesador: RISC, SISC Longitud de registro: x32 o x64 bits Tipo de sistema operacional: Windows, Linux, AIX Tamao, robustez o producto: Exprs, Server, Cliente ACCESO COMO CLIENTE A LA BASE DE DATOS. Dependiendo del tipo de base de datos que se instale y del sistema operacional, se cuenta con herramientas o servicios de conexin. ODBC JDBC Acceso propietario o nativo (Plus)

Acceso por servicio iSQL*plus

Acceso por medio de una herramienta grfica como TOAD o SQLDeveloper.

MODELADO DE BASES DE DATOS.


Usaremos la METODOLOGIA RICHARD BARKER, con la herramienta CASE Power Designer, la cual define los siguientes diagramas: Modelo proceso de lgica de negocio Modelo Conceptual Modelo Lgico Modelo fsico Script de creacin. Trabajaremos sobre el modelo de la siguiente narrativa: Una empresa fabricante de carnes fras que tiene una nica sede en Bogot. Esta empresa tiene varios vendedores los cuales recorren todo Colombia vendiendo los productos. Los clientes que estn en diferentes ciudades, pueden comprar a crdito o de contado, dependiendo como se haya definido su liquidez. Pueden tener varias sucursales en la misma o diferente ciudad. A los vendedores se les paga de acuerdo a sus ventas (comisin). En cada factura debe ir una venta que consta de uno o varios productos. Es del inters del gerente poder controlar las existencias de los productos, fechas de vencimiento, mejores clientes, mejores vendedores, ventas por periodos de tiempo, clasificar ventas por ciudad y por cliente.

DIAGRAMA CONCEPTUAL

DIAGRAMA LOGICO

SCRIPT DE CREACION GENERADO POR LA HERRAMIENTA


/*==============================================================*/ /* DBMS name: ORACLE Version 10gR2 */ /* Created on: 12/09/2010 16:23:40 */ /*==============================================================*/ alter table CLIENTES drop constraint FK_CLIENTES_LUGAR_LUGARES; alter table ITEMS drop constraint FK_ITEMS_PRODUCTO_PRODUCTO; alter table ITEMS drop constraint FK_ITEMS_RECIBO_VENTAS; alter table LUGARES drop constraint FK_LUGARES_UBICA_LUGARES; alter table VENTAS drop constraint FK_VENTAS_CLIENTE_CLIENTES; alter table VENTAS drop constraint FK_VENTAS_CLIENTE2_VENDEDOR; alter table VENTAS

drop constraint FK_VENTAS_VENDEDOR_CLIENTES; alter table VENTAS drop constraint FK_VENTAS_VENDEDOR2_VENDEDOR; drop table CLIENTES cascade constraints; drop table ITEMS cascade constraints; drop table LUGARES cascade constraints; drop table PRODUCTOS cascade constraints; drop table VENDEDORES cascade constraints; drop table VENTAS cascade constraints; /*==============================================================*/ /* Table: CLIENTES */ /*==============================================================*/ create table CLIENTES ( CODIGO_LUGAR NUMBER(3) not null, CODIGO_PERSONA NUMBER(3) not null, TIPO_CODIGO VARCHAR2(1), TIPO_PERSONA VARCHAR2(1), NOMBRE_PERSONA VARCHAR2(25), APELLIDO_PERSONA VARCHAR2(25), MONTO_CREDITO NUMBER(11,2) default 0 not null constraint CKC_MONTO_CREDITO_CLIENTES check (MONTO_CREDITO <= 10000000), ESTADO_CLIENTE VARCHAR2(1) default 'A' not null constraint CKC_ESTADO_CLIENTE_CLIENTES check (ESTADO_CLIENTE in ('A','I','D') and ESTADO_CLIENTE = upper(ESTADO_CLIENTE)), FECHA_ANTIGUEDAD DATE not null, constraint AK_IDENTIFIER_1_CLIENTES unique (CODIGO_PERSONA) ); /*==============================================================*/ /* Table: ITEMS */ /*==============================================================*/ create table ITEMS ( CODIGO_RECIBO NUMBER(4) not null, CODIGO_PRODUCTO NUMBER(3) not null, CANTIDAD_PRODUCTO NUMBER(6) not null, VALOR_VENTA NUMBER(11,2) not null, constraint PK_ITEMS primary key (CODIGO_RECIBO, CODIGO_PRODUCTO) );

/*==============================================================*/ /* Table: LUGARES */ /*==============================================================*/ create table LUGARES ( CODIGO_LUGAR NUMBER(3) not null,

CODIGO_UBICA NUMBER(3) not null, NOMBRE_LUGAR VARCHAR2(50) not null, TIPO_LUGAR VARCHAR2(1) default 'M' not null constraint CKC_TIPO_LUGAR_LUGARES check (TIPO_LUGAR in ('P','D','M') and TIPO_LUGAR = upper(TIPO_LUGAR)), constraint PK_LUGARES primary key (CODIGO_LUGAR) ); /*==============================================================*/ /* Table: PRODUCTOS */ /*==============================================================*/ create table PRODUCTOS ( CODIGO_PRODUCTO NUMBER(3) not null, NOMBRE_PRODUCTO VARCHAR2(20) not null, VALOR_UNITARIO NUMBER(6) not null, EXISTENCIA NUMBER(6) not null, FECHA_VENCIMIENTO DATE not null, DESCRIPCION VARCHAR2(30), constraint PK_PRODUCTOS primary key (CODIGO_PRODUCTO) ); /*==============================================================*/ /* Table: VENDEDORES */ /*==============================================================*/ create table VENDEDORES ( CODIGO_PERSONA NUMBER(3) not null, TIPO_CODIGO VARCHAR2(1), TIPO_PERSONA VARCHAR2(1), NOMBRE_PERSONA VARCHAR2(25), APELLIDO_PERSONA VARCHAR2(25), SEXO VARCHAR2(1) default 'M' not null constraint CKC_SEXO_VENDEDOR check (SEXO in ('F','M') and SEXO = upper(SEXO)), FECHA_VINCULACION DATE not null, PORCENTAJE_COMISION NUMBER(3,1) default 0 not null constraint CKC_PORCENTAJE_COMISI_VENDEDOR check (PORCENTAJE_COMISION between 0 and 50), constraint AK_IDENTIFIER_1_VENDEDOR unique (CODIGO_PERSONA) ); /*==============================================================*/ /* Table: VENTAS */ /*==============================================================*/ create table VENTAS ( CODIGO_RECIBO NUMBER(4) not null, CODIGO_CLIENTE NUMBER(3) not null, CODIGO_VENDEDOR NUMBER(3) not null, FECHA_VENTA DATE not null, FORMA_PAGO VARCHAR2(1) default 'P' not null constraint CKC_FORMA_PAGO_VENTAS check (FORMA_PAGO in ('C','P') and FORMA_PAGO = upper(FORMA_PAGO)), OBSERVACIONES VARCHAR2(50), constraint PK_VENTAS primary key (CODIGO_RECIBO) ); alter table CLIENTES add constraint FK_CLIENTES_LUGAR_LUGARES foreign key (CODIGO_LUGAR) references LUGARES (CODIGO_LUGAR);

alter table ITEMS add constraint FK_ITEMS_PRODUCTO_PRODUCTO foreign key (CODIGO_PRODUCTO) references PRODUCTOS (CODIGO_PRODUCTO); alter table ITEMS add constraint FK_ITEMS_RECIBO_VENTAS foreign key (CODIGO_RECIBO) references VENTAS (CODIGO_RECIBO); alter table LUGARES add constraint FK_LUGARES_UBICA_LUGARES foreign key (CODIGO_UBICA) references LUGARES (CODIGO_LUGAR); alter table VENTAS add constraint FK_VENTAS_CLIENTE_CLIENTES foreign key (CODIGO_CLIENTE) references CLIENTES (CODIGO_PERSONA); alter table VENTAS add constraint FK_VENTAS_CLIENTE2_VENDEDOR foreign key (CODIGO_CLIENTE) references VENDEDORES (CODIGO_PERSONA); alter table VENTAS add constraint FK_VENTAS_VENDEDOR_CLIENTES foreign key (CODIGO_VENDEDOR) references CLIENTES (CODIGO_PERSONA); alter table VENTAS add constraint FK_VENTAS_VENDEDOR2_VENDEDOR foreign key (CODIGO_VENDEDOR) references VENDEDORES (CODIGO_PERSONA);

SCRIPT GENERADO POR HERRAMIENTA QUE NO SEPARA CREACION DE ATRIBUTOS RESPECTO A RESTRICCIONES create table personas( codigo_persona number(3) not null constraint per_pk_cope primary key, tipo_codigo varchar2(1) default 'C' not null constraint per_ck_tico check (tipo_codigo in ('C' /*Cedula*/, 'N' /*Nit*/)), tipo_persona varchar2(1) not null constraint per_ck_tipe check (tipo_persona in('V' /*Vendedor*/, 'C' /*Cliente*/)), nombre_persona varchar2(25) not null, apellido_persona varchar2(25), sexo varchar2(1) default 'F' not null const raint per_ck_sex check (sexo in ('M','F') and sexo = upper(sexo)), fecha_vinculacion date, porcentaje_comision number(6) constraint per_ck_poco check (porcentaje_comision between 0 and 50), codigo_lugar number(3), monto_credito number(11,2) constraint per_ck_mocr check (monto_credito<=10000000), estado_cliente varchar2(1) constraint per_ck_escl check(estado_cliente in ('A' /*Activo*/, 'D' /*Deudor*/, 'I' /*Inactivo*/)), fecha_intiguedad date, constraint per_fk_colu foreign key (codigo_lugar) references lugares(codigo_lugar) ) tablespace usarios storage (initial 40k next 10k pctincrease 0);

10

SCRIPT DE CREACION SEPARADOS SEGN BARKER. Metodologa Un archivo por cada objeto. Nombre de archivos ctXXXX.sql Nombre de archivos ccXXXX.sql Nombre de constraints: o Para llave primaria TABLA_PK_COLUMNA o Para llave fornea TABLA_FK_COLUMNAS o Para Chequeo TABLA_CK_COLUMNAS o Para nico TABLA_UQ_COLUMNA

-- Archivo ctlugares.sql -- Script Creacion del objeto TABLA LUGARES -- Diseo: JORGE E. QUEVEDO R. -- Fecha: septiembre 15 de 2010 -- Modifico: -- Fecha : create table lugares( codigo_lugar number(3) not null, nombre_lugar varchar2(50) not null, codigo_ubica number(3), tipo_lugar varchar2(1) default 'M' not null ) tablespace user_data / -- Archivo cclugares.sql -- Script para crear o adicionar CONSTRAINT del objeto TABLA LUGARES -- Diseo: JORGE E. QUEVEDO R. -- Fecha: septiembre 15 de 2010 -- Modifico: -- Fecha: alter table lugares add ( constraint lug_pk_colu primary key (codigo_lugar), constraint lug_ck_tilu check (tipo_lugar in ('P' /*Pais*/,'D' /*Departamento*/,'M' /*Municipio*/)), constraint lug_fk_colu2 foreign key (codigo_ubica) references lugares(codigo_lugar) ) /

11

-- Archivo: ctpersonas.sql -- Script Creacion del objeto TABLA PERSONAS -- Diseo: JORGE E. QUEVEDO R. -- Fecha: septiembre 15 de 2010 -- Modifico: -- Fecha : create table personas ( /* CAMPOS COMUNES */ codigo_persona number(3) tipo_codigo varchar2(1) default C tipo_persona varchar2(1) default C nombre_persona varchar2(25) apellido_persona varchar2(25), /* CAMPOS DEL SUBTIPO VENDEDOR */ sexo varchar2(1) fecha_vinculacion date, porcentaje_comision number(3,1), /* CAMPOS DEL SUBTIPO CLIENTE */ codigo_lugar number(3), monto_credito number(11,2), estado_cliente varchar2(1) default A, fecha_antiguedad date ) /

not null, not null, not null, not null, not null,

-- Archivo: ccpersonas.sql -- Script para crear o adicionar CONSTRAINT del objeto TABLA PERSONAS -- Diseo: JORGE E. QUEVEDO R. -- Fecha: septiembre 15 de 2010 -- Modifico: -- Fecha: alter table personas add ( /* CONSTRAINT COMUNES */ constraint per_pk_cope primary key (codigo_persona), constraint per_ck_tico check (tipo_codigo in ('C' /*cedula*/,'N' /*nit*/)), constraint per_ck_tipe check (tipo_persona in ('V' /*vendedor*/,'C' /*cliente*/)), /* CONSTRAINT DEL SUBTIPO VENDEDOR */ constraint per_ck_sex check (sexo in ('M','F')), constraint per_ck_poco check (porcentaje_comision between 0 and 50), /* CONSTRAINT DEL SUBTIPO CLIENTE */ constraint per_fk_colu foreign key (codigo_lugar) references lugares (codigo_lugar), constraint per_ck_mocr check (monto_credito <= 10000000), constraint per_ck_escl check (estado_cliente in ('A' /*Activo*/,'D' /*Deudor*/,'I' /*Inactivo*/)) ) /

12

-- Archivo: ctventas.sql -- Script Creacion de un objeto TABLA VENTAS -- Diseo: JORGE E. QUEVEDO R. -- Fecha: septiembre 15 de 2010 -- Modifico: -- Fecha : create table ventas( codigo_vendedor number(3) not null, codigo_cliente number(3) not null, codigo_recibo number(4) not null, fecha_venta date default sysdate not null, forma_pago varchar2(1) default 'P' not null, observaciones varchar2(50) ) / -- Archivo: ccventas.sql -- Script para crear o adicionar CONSTRAINT del objeto TABLA VENTAS -- Diseo: JORGE E. QUEVEDO R. -- Fecha: septiembre 15 de 2010 -- Modifico: -- Fecha: alter table ventas add ( constraint vent_pk_core primary key (codigo_recibo), constraint vent_fk_cove foreign key (codigo_vendedor) references personas (codigo_persona), constraint vent_fk_cocl foreign key (codigo_cliente) references personas (codigo_persona), constraint vent_ck_fopg check (forma_pago in ('P' /*contado*/,'C' /*credito*/)) ) / -- Archivo: ctproductos.sql -- Script Creacion del objeto TABLA PRODUCTOS -- Diseo: JORGE E. QUEVEDO R. -- Fecha: septiembre 15 de 2010 -- Modifico: -- Fecha : create table productos( codigo_producto number(3) not null, nombre_producto varchar2(20) not null, descripcion varchar2(30), valor_unitario number(6) not null, existencia number(6) not null, fecha_vencimiento date not null ) / -- Archivo: ccproductos.sql -- Script Creacion de los constraint del objeto TABLA PRODUCTOS -- Diseo: JORGE E. QUEVEDO R. -- Fecha: septiembre 15 de 2010 -- Modifico: -- Fecha : alter table productos add( constraint pro_pk_copro primary key (codigo_producto), constraint pro_ck_exis check (existencia >= 0) ) /

La creacin de la tabla ITEMS y sus constraints queda de ejercicio.

13

SENTENCIAS DEL SQL

TIPO DE DATOS
TIPO DATO NUMBER CHAR VARCHAR2 DATE LONG RAW DESCRIPCION datos de tipo numrico (mxima precisin 38 dgitos) datos de tipo carcter fijos (mximo 255 caracteres)
datos de tipo carcter variables (mximo 2000 caracteres)

Para datos de tipo fecha Para caracteres de longitud variable hasta 2 Gigabytes Para almacenar datos binarios hasta 255

14

Taller 1. Modelos, Scrips y generacin de Objetos de la Base de Datos.


Objetivos Comprender el proceso completo de una herramienta CASE, hasta cuando se genera los scripts Conocer metodologas, como la de barker, para administrar scrips, y nombres de restricciones. Realizar la creacin de objetos en la base de datos Recursos del DBMS. Tablas del sistema: o Tab o user_objects o user_constraints o user_cons_columns Actividades Generar tablas Del modelo de Transporte, siguiendo los pasos modelo conceptual, lgico, fsico, scripts, generar los scrips. Depurar los scripts utilizando la metodologa de Barker para los scripts, nombre de atributos y restricciones. objeto se podra hacer: Directamente en el prompt. SQL> lnea por lnea. Por el ambiente grfico de SQLDeveloper Ejecutando el script por lnea de comandos.

Para crear un

Ejecutar los script. Es recomendable que tenga extensin .sql, y los nombres de los archivos tengan la estructura que se defini en la metodologa. Desde el promp SQL>, se pude iniciar la edicin de un script, con la sentencia: ed nombre_archivo

Para correr este script se hace as: @nombre_archivo start nombre_archivo.

Para verificar la creacin de la tabla, se puede utilizar: select * from tab; desc lugares

Como en el caso de programacin por objetos en java, la idea es que exista un archivo fsico por cada tabla. Este archivo fsico corresponde al script que al ejecutarlo crea la tabla en la base de datos. Para poder articular todos los scripts se puede hacer con un script superior que articula todos los anteriores. El script que crea el modelo se llama creasistema.sql y contiene los siguientes comandos:

15 ---Este script Crea todo el modelo --Autor: JORGE E. QUEVEDO REYES. --Fecha de Creacin: --Modific: --Fecha de modificacin: ---BORRADO DE TABLAS drop table tems drop table ventas drop table personas drop table lugares drop table productos --CREACION DE TABLAS @ctproductos @ctlugares @ctpersonas start ctventas @ctitems --ADICION DE CONSTRAINTS @ccproductos start cclugares @ccpersonas @ccventas @ccitems Otro tipo de script para borrado correspondera a:

--- Este Script para BORRADO recursivo -- de todas las TABLAS y CONSTRAINTS -- Autor: JORGE E. QUEVEDO REYES. -- Fecha de Creacin: -- Modific: -- Fecha de modificacin: -drop table items cascade constraint / drop table ventas cascade constraint / drop table personas cascade constraint / drop table lugares cascade constraint / drop table productos cascade constraint / drop sequence nro_venta /
Si quisiera borrar parte del modelo levantando los constraints referidos en forma selectiva sera: alter table personas drop constraint per_pk_cope;

16 Luego de crear todos las tablas, consultar el anterior modelo con herramientas grficas (SQLDeveloper) y en modo texto con SQL*Plus. Indagar todos los tipos de restricciones da las tablas por medio de las siguientes tablas del sistema: user_constraints, user_cons_columns Para visualizar ms claramente las consultas de las tablas ample el buffer con el siguiente set: set linesize 200 Para acortar el tamao de una columna en el buffer del plus se puede hacer con: column APELLIDO format a15 En la anterior sentencia se supone que APELLIDO es un atributo de una tabla, que es de tipo VARCHAR2(50), con un tamao muy grande, se quiere acortar a 15. Este efecto es para el editor de SQL y no afecta la tabla.

17

Taller 2. ALIMENTANDO EL MODELO RELACIONAL


Objetivo Comprender el proceso de insercin de datos en objetos tipo tabla. Recursos del DBMS. Tablas del sistema: o Table o Table dual Actividades Insertar datos en las tablas A partir del modelo de ventas hacer las correspondientes inserciones.

Comandos esenciales usados: INSERT, COMMIT, DROP, SELECT En este instante el modelo est listo pero desocupado, para insertar filas es con el siguiente comando: insert into lugares values (0,'COLOMBIA',NULL,'P') / insert into lugares values(1,'SANTANDER',0,'D') / insert into lugares values(2,'BOYACA',0,'D') / insert into lugares values(30,'SOCORRO',1,'M') / insert into lugares values(31,'TUNJA',2,'M') / insert into lugares values(32,'SANGIL',1,'M') / insert into lugares values(33,DUITAMA,2,M) / Finalmente hay que darle el comando COMMIT, para confirmar los ltimos cambios hechos a las tablas, en este caso las inserciones. Llene de valores las dems tablas teniendo en cuenta la integridad referencial (dependencias) existente entre ellas, porque de lo contrario ORACLE no permite las inserciones.
-- VENDEDORES insert into personas values (200,'C','V','LUIS ENRIQUE','PEREZ REYES', 'M','01/02/1990',15,NULL,NULL,NULL,NULL) / insert into personas values (201,'C','V','PEDRO','RUIZ', 'M','23/12/1992',10,NULL,NULL,NULL,NULL) / insert into personas values (202,'C','V','JUAN','QUINTERO', 'M','01/01/1994',5,NULL,NULL,NULL,NULL)

18 / -- CLIENTES insert into personas values (800,'N','C','CARULLA',NULL,NULL,NULL,NULL, 31,2000000,'A','20/03/1997') / insert into personas values (801,'C','C','CARLOS','PINEDA',NULL,NULL,NULL, 31,500000,'A','19/06/1998') / insert into personas values (802,'N','C','LA ESQUINA',NULL,NULL,NULL,NULL, 32,0,'A','22/03/1997') / insert into personas values (803,'C','C','MARTHA','CASTRO',NULL,NULL,NULL, 32,0,'A','15/06/1998') / insert into personas values (804,'N','C','LA TIENDA',NULL,NULL,NULL,NULL, 30,100000,'A','20/05/1996') / insert into personas values (805,'N','C','TRES ELEFANTES',NULL,NULL,NULL,NULL, 33,8000000,'A','20/05/1995') /

Llene de valores de tabla ventas.


insert into ventas values(200,800,555,'19/01/1998','P',NULL) / insert into ventas values(200,801,556,'13/02/1999','P',NULL) / insert into ventas values(201,800,557,'22/03/1999','P',NULL) / insert into ventas values(200,800,558,'28/03/1999','P',NULL) / insert into ventas values(202,804,559,'30/06/1999','C',NULL) / insert into ventas values(200,803,560,'15/03/1999','P',NULL) /

Finalicemos con COMMIT. Llene de valores de tablas productos e items.

19

Taller 3. Ingeniera Reversa de una estructura de Bases de Datos


Objetivos Comprender el proceso de Ingeniera reversa. Revisar la consistencia del modelo conceptual, respecto a la estructura fsica de las tablas. Recursos del DBMS. Tablas del sistema: o Tab o user_objects o user_constraints o user_cons_columns Objetos del usuario HR de ORACLE REGIONS COUNTRIES LOCATIONS DEPARTMENTS JOBS EMPLOYEES JOB_HISTORY EMP_DETAILS_VIEW Recursos de Herramientas. Power Designer SQL*Plus Actividades Realizar la ingeniera reversa. Con Power Designer, crear una conexin. Luego por la opcin Reverse Engineer, Seleccione los objetos del usuario HR. Revise la Consistencia del Modelo. Con SQL*Plus y con el entorno grfico de SQLDeveloper, revise la estructura de las tablas para mirar la consistencia del proceso de ingeniera reversa. Para revisar la estructura de las tablas se hace con: desc departments

TABLE TABLE TABLE TABLE TABLE TABLE TABLE VIEW

20

Taller 4. CONSULTANDO MODELO RELACIONAL


Objetivo Comprender el proceso de Consulta como la sentencia ms poderosa del grupo DML Recursos del DBMS. Tablas del sistema: o dual o user_objects

Comandos esenciales usados: SELECT, COLUMN FORMAT SENTENCIA DE SELECION (SELECT): Para la seleccin de filas de una o ms tablas con el propsito se consultar informacin, se hace con el comando SELECT. Este comando es uno de los ms poderosos y utilizados como base importante para PL/SQL, REPORTES, FORMULARIOS, INFORMES SQL y ms. Tiene la capacidad de manejar Operadores lgicos, Operadores relacionales, funciones de cadena, Funciones de fecha, Funciones matemticas, Funciones de grupo. OPERADORES ARITMETICOS
OPERADOR + * / SIGNIFICADO Suma Multiplicacin Resta Divisin

OPERADORES RELACIONALES
OPERADOR

= <> = > < >= <=


BETWEEN IN IS NULL LIKE.

SIGNIFICADO Igual Distinto de Mayor que Menor que Mayor o igual que Menor o igual que Entre dos valores a between (3 and 10) Verifica que exista el valor en un grupo Es nulo Coincide con LIKE CAR%

21

OPERADORES LOGICOS.
OPERADOR SIGNIFICADO Debe cumplir ambas condiciones para ser verdadero Puede cumplir alguna condicin para ser verdadero Niega la sentencia

AND OR NOT FUNCIONES DE GRUPO


FUNCION SUM( ) AVG( ) MIN( ) MAX( ) COUNT( ) SIGNIFICADO Calcula total de una suma Calcula el valor Promedio de un grupo Busca el valor mnimo de una columna Busca el valor mximo de una columna Cuenta el nmero de filas

ALGUNAS FUNCIONES MATEMATICAS


FUNCION TRUNC( ) ROUND( ) SIN( ) ABS( ). SIGNIFICADO Trunca partir de una cifra en un nmero real. Trunc(12.45,2) Redondea a partir de una cifra en un nmero real Round(12.56,2) Calcula el seno de un valor Calcula el valor absoluto de un nmero

ALGUNAS FUNCIONES DE CADENA.


FUNCION TO_CHAR( ) UPPER( ) LOWER( ) INITCAP( ) SUBSTR( ) SIGNIFICADO Convierte a carcter un nmero o Fecha Permuta un grupo de caracteres de minscula a mayscula Permuta un grupo de caracteres de mayscula a minscula Permuta de un grupo de caracteres el primero a mayscula Extrae una parte o substring de un String CONCATENA dos cadenas de caracteres en una sola

||

ALGUNAS FUNCIONES DE FECHA


FUNCION TO_DATE( ) MONTH, YEAR SYSDATE SIGNIFICADO Pasa una cadena a tipo DATE Mscara para referirnos solamente al mes, ao Calcula la fecha y hora de hoy (Actual)

ALGUNAS OTRAS FUNCIONES


FUNCION NVL DECODE SIGNIFICADO Reemplaza NULL por algn valor definido nvl(saldo,0) Visualiza una palabra a cambio de un CARCTER

22

PRACTICA. Describa que hace cada uno de los comandos siguuientes: 1. Un select simple para que muestre toda la informacin de una tabla: select * from ventas; 2. Select para mostrar algunos campos: select nombre_persona, tipo_persona from personas; 3. Select con condicin WHERE: select nombre_persona,apellido_persona,tipo_persona from personas where tipo_persona = C; 4. Select con operadores lgicos y concepto de orden: select nombre_persona,apellido_persona,estado_cliente,codigo_lugar from personas where tipo_persona = C and estado_cliente = A and codigo_lugar in (30,31) order by nombre_persona; 5. Select equivalente pero en cambio de IN con OR. Select nombre_persona,apellido_persona,estado_cliente,codigo_lugar from personas where tipo_persona = C and estado_cliente = A and codigo_lugar = 30 or codigo_lugar =31 order by nombre_persona; 6. Select con rango de valores: select nombre_persona,apellido_persona,codigo_lugar,monto_credito from personas where tipo_persona = C and monto_credito > 0 and monto_credito <= 8000000 order by codigo_lugar; 7. Otro estilo del Select anterior. Select nombre_persona,apellido_persona,codigo_lugar,monto_credito from personas where tipo_persona = C and monto_credito between 0 and 8000000 order by codigo_lugar; 8. Un select puede el concepto de orden ir en forma descendente DESC. Select nombre_persona,apellido_persona,codigo_lugar,monto_credito from personas where tipo_persona = C

23

and monto_credito between 0 and 8000000 order by codigo_lugar desc; 9. Select con operador relacional LIKE, muestra la fila que coincida la cadena del campo con la muestra buscada. Select nombre_persona,apellido_persona from personas where nombre_persona like %CA%; 10. Select con valores de variable de entrada. Select * from ventas where codigo_cliente = &cliente;

11. Select con manejo de la tabla DUAL, la cual me permite mostrar valores no necesariamente de una tabla sino del sistema o de clculos directos. Sysdate saca la fecha actual. Select sysdate from dual; select (10+5) * 2 / (200-150) from dual; 12. 13. Select con alias de columna. Select (10+5) * 2 / (200-150) total from dual; Select con funciones matemticas. Select round(12.843,1) from dual;

14. Se puede hacer clculos sobre una columna de una tabla y mostrarla como otra columna. Select nombre_persona,tipo_persona,porcentaje_comision, porcentaje_comision*1.10 from personas where tipo_persona = V; 15. Igual que el anterior pero con ALIAS la columna. Select nombre_persona,tipo_persona,porcentaje_comision,porcentaje_comision* 1.10 total from personas where tipo_persona = V; Select con manejo de Funciones de cadena. Select substr(nombre_persona,1,5) nombre from personas where tipo_persona = C; select nombre_persona,length(nombre_persona) longitud from personas where tipo_persona = V

16.

24

order by length(nombre_persona); select nombre_persona, upper(nombre_persona), lower(nombre_persona), initcap(nombre_persona) from personas where tipo_persona = C; 17. COLUMN FORMAT y LINESIZE, comandos SET que se usan cuando queremos variar el ancho de una columna o ampliar el tamao de la lnea respectivamente, solo para mostrar datos. Column nombre_persona format a15 Set linesize 200 18. La funcin DECODE me permite cambiar valores de un solo carcter como una palabra completa, que sera su equivalente. Este efecto solo es en la pantalla. Select nombre_persona, decode(tipo_persona,C,Cliente,V,Vendedor), decode(tipo_codigo,C,Cedula,N,Nit), codigo_persona from personas; 19. La funcin NVL me permite redefinir el valor NULO de un campo, por uno deseado. Select nombre_persona, estado_cliente, nvl(estado_cliente,I), porcentaje_comision,nvl(porcentaje_comision,0) from personas where tipo_persona = C; 20. Select con funciones de FECHA. Select to_date(03/01/2000,MM/DD/YYYY) FROM DUAL; select to_date(03/01/2000,MM/DD/RRRR) FROM DUAL; SELECT TO_CHAR(SYSDATE,DD/MM/YYYY) FROM DUAL; SELECT TO_CHAR(SYSDATE,DD/MM/RRRR) FROM DUAL; select to_char(sysdate,month) from dual; select to_char(sysdate,day/month/year) from dual; select to_char(sysdate,HH:MI:SS) from dual;

25

21.

Select con funcin de conversin de formato fecha a carcter: Select nombre_persona,fecha_vinculacion,to_char(fecha_vinculacion,YYYY) from personas where tipo_persona=V; Select donde se usa un campo fecha como parte de un condicional. Select nombre_persona,fecha_vinculacion from personas where tipo_persona=V and to_char(fecha_vinculacion,YYYY) = 1994;

22.

SELECCIN DE COLUMNAS DE MAS DE UNA TABLA (JOINS). Al existir todo un modelo Relacionado, una de las herramientas ms poderosas es poder obtener informacin de varias tablas, navegando por las relaciones. A esto se le llama JOINS. 23. A este tipo de select se le debe colocar ALIAS a las tablas para poderlas relacionar ms fcilmente. Select l.codigo_lugar,nombre_lugar,nombre_persona from personas p, lugares l where tipo_persona = C and l.codigo_lugar = p.codigo_lugar; 24. En un select JOIN se debe prefijar con alias los campos con nombres iguales de las tablas relacionas, para que el select pueda diferenciarlos. select nombre_persona,monto_credito,l.codigo_lugar,nombre_lugar from personas p, lugares l where tipo_persona = 'C' and p.codigo_lugar = l.codigo_lugar; 25. Si no es claro el despliegue se debe ajustar la visualizacin de las columnas con el comando: column nombre_persona format a15 26. Seleccione cada una de las ventas indicando nombre del cliente, nombre del vendedor. Ordenado por cliente. 27. Seleccione cada una de las ventas indicando nombre del cliente, nombre del lugar de ubicacin del cliente, nombre del vendedor, nmero del recibo y forma de pago (use el decode). Se debe ordenar por ciudad y cliente. Otra forma de referirme al Order by es por nmeros, los cuales deben corresponder a la ubicacin del campo en mencin dentro del select.

26

Ejemplo: Select cedula, apellido, nombre from estudiantes Where cedula>100 order by apellido, nombre; Este order by equivale a: order by 2,3; SELECCIN DE COLUMNAS FANTASMAS (OUTER JOINS). Cuando en un JOIN, una fila no tiene su correspondiente igualdad en la tabla en la que se busca, normalmente se omite la trada de dicha fila. Con esta opcin colocndole el signo (+) a la derecha de la columna que se presume no se va a encontrar correspondencia, se logra que salga en la bsqueda mostrando un valor NULO para visualizar que no tiene valor o tupla respectiva. Si se quiere que el NULO tenga algn otro valor se manipula con NVL. Inicie verificando el resultado de la siguiente consulta:
select c.codigo_persona,c.nombre_persona cliente, ve.codigo_recibo from personas c, ventas ve where ve.codigo_cliente = c.codigo_persona and tipo_persona = 'C' order by c.codigo_persona; Ahora use el signo (+) correspondiente al autor join: select c.codigo_persona,c.nombre_persona cliente, ve.codigo_recibo from personas c, ventas ve where ve.codigo_cliente (+) = c.codigo_persona and tipo_persona = 'C' order by c.codigo_persona; Perfeccione la salida usando la funcin NVL con un remplazo del NULO y comprenda el uso del As en el alias.
select c.codigo_persona,c.nombre_persona cliente, nvl(to_char(ve.codigo_recibo),'NR') As Recibo from personas c, ventas ve where ve.codigo_cliente (+) = c.codigo_persona and tipo_persona = 'C' order by c.codigo_persona;

SELECCIN DE COLUMNAS CON FUNCIONES DE GRUPO. Estas funciones permiten agrupar en contenido de una o ms filas a partir de una condicin dada a una columna o campo. 1. Select que me permite buscar valores extremos en una tabla, no se est agrupando filas sino seleccionado valores nicos. select max(porcentaje_comision), min(porcentaje_comision), avg(porcentaje_comision)

27

from personas; 2. Este select AGRUPA filas por la condicin del campo y totaliza la sumatoria del campo en mencin. select forma_pago,sum(valor_venta) from ventas v, items i where v.codigo_recibo=i.codigo_recibo group by forma_pago; 3. Compare el anterior ejercicio con este, el cual tiene doble nivel de agrupacin. select to_char(fecha_venta,'yyyy'), forma_pago,sum(valor_venta) from ventas v, items i where v.codigo_recibo=i.codigo_recibo group by to_char(fecha_venta,'yyyy'),forma_pago; 4. Select con COUNT. select nombre_lugar,count(*) from lugares l, personas p where l.codigo_lugar = p.codigo_lugar and p.tipo_persona = 'C' group by nombre_lugar; 5. La clusula HAVING, permite condicionar el campo que est en la funcin de grupo, o incluso a la misma funcin, facilitando que tome parte en el filtrado. select nombre_lugar,count(*) from lugares l, personas p where l.codigo_lugar = p.codigo_lugar and p.tipo_persona = 'C' group by nombre_lugar having count(*) < 2; SELECCIONANDO A PARTIR DE UNA SELECCIN (SUBQUERY) Se defina tambin como SELECT ANIDADOS, pero el potencial de un SUBQUERY tambin llega a los comandos de UPDATE y DELETE. select nombre_persona from personas where codigo_lugar IN (select codigo_lugar from lugares where nombre_lugar like 'T%' ) and tipo_persona = 'C';

28

Taller 5. MANTENIMIENTO Y RENDIMIENTO DEL MODELO


Objetivo Conocer mecanismos para mantenimiento al modelo de datos, como creacin de ndices y otros objetos que mejoran el rendimiento Recursos y tablas del sistema DBMS. Tablas del sistema: o user_views; Objetos nuevos: o Vistas o ndices o Sinnimos o Secuencias

Comandos esenciales usados: UPDATE, DELETE, ALTER, DROP, SET,SPOOL, INSERT CREAR UNA TABLA DE COPIA Y GESTIONAR CON UNA ORIGINAL. Normalmente se usa una operacin de copiar o duplicar solo una tabla, para poder hacer una operacin peligrosa. En caso que se falle poder recuperarla o ver la desigualdad en filas. 1. Crear una tabla copia de ventas create table cventas as select * from ventas; 2. Borre de la copia cventas todas las ventas hechas por el vendedor (200). Delete from cventas where codigo_vendedor=200; 3. Veamos la diferencia entre las dos tablas. select * from ventas where codigo_recibo in (select codigo_recibo from cventas); CREACION DE VISTAS. Este procedimiento facilita en muchos casos la gestin de datos, como tambin poder clasificar los datos para mejorar las consultas. En este caso podemos manejar en una forma ms adecuada el modelo de subtipos, complementndolo con dos vistas clientes y vendedores. create view clientes as select codigo_persona,tipo_codigo,nombre_persona,apellido_persona, codigo_lugar,monto_credito,estado_cliente,fecha_antiguedad from personas where tipo_persona = 'C';

29

Examinemos la existencia de la vista, su estructura y sus datos. select * from tab; desc clientes; select * from clientes; De la misma forma construir la vista de vendedores. Para verificar o reconstruir el select que gener la vista, se puede por la consulta a la tabla del sistema: select VIEW_NAME, TEXT from user_views;

VISTAS INLINE Este recurso permite definir vistas temporales facilitando consultas y evitando la creacin de vistas que posiblemente no se vuelvan a utilizar.
select v.nombre_vendedor,f.codigo_recibo from vendedores v, (select ve.codigo_recibo,sum(i.cantidad_producto*i.valor_venta) suma from ventas ve, items i where ve.codigo_recibo=i.codigo_recibo group by ve.codigo_recibo) tf, ventas f where v.codigo_vendedor=f.codigo_vendedor and tf.codigo_recibo=f.codigo_recibo and tf.suma>100000;

CREACION DE SECUENCIAS. Objetos que nos permiten generar nmeros o consecutivos para uso general. Se puede utilizar como llave de una tabla. Crear la secuencia nro_venta. create sequence nro_venta start with 1 increment by 1; Verificar que la secuencia fue creada: select * from user_sequences; Para solicitarle a la secuencia el prximo nmero a utilizar se hace con el comando: select nro_venta.nextval from dual; Para cuestionar sobre el valor actual de la secuencia: select nro_venta.currval from dual;

30

En algn caso y para cualesquier tabla, se puede utilizar como generador de Llave primaria. insert into ventas values (200, 800, nro_venta.nextval, '19/01/1998', 'P',NULL) / Si lo que se quiere es borrar la secuencia se hace con el comando: drop sequence nro_venta;

BORRADO DE INFORMACION. Normalmente se desea borrar informacin por cualquier causa, es aconsejable verificar primero la informacin a borrar por medio de un select. Para borrar en forma puntual una fila o grupo de filas es con el condicional WHERE Delete from cventas where codigo_vendedor=201; Para borrar todo es: Delete from cventas;

Es importante destacar que el potencial del comando borrado depende de la destreza para manejar el WHERE, ya que permite hasta SUBQUERY. Recuerde que si borra datos de una VISTA los est BORRANDO de la TABLA a la que est ligada. Borrar cierto nmero de tuplas especficas a partir de una subconsulta. DELETE FROM cventas WHERE codigo_recibo IN (SELECT codigo_recibo FROM ventas WHERE codigo_vendedor=200); ACTUALIZACION DE INFORMACION. Actualizar un campo o varios campos es una operacin normal y cotidiana que se hace mediante el comando UPDATE. Para actualizar el monto de crdito a un cliente moroso de cdigo 804 y pasarlo a 0. update personas set monto_credito=0 where tipo_persona='C' and codigo_persona=804; Para actualizar ms de un campo al tiempo, se escriben uno a uno con su nuevo valor, separndolos por comas.

31

update personas set monto_credito=0,estado_cliente = D where tipo_persona='C' and codigo_persona=804; Es importante destacar que el potencial del comando UPDATE depende de la destreza para manejar el WHERE, ya que permite hasta SUBQUERY. Actualizacin de dos columnas a partir de consultas: UPDATE vendedores SET porcentaje_comision = (SELECT porcentaje_comision FROM vendedores WHERE codigo_vendedor = 201), sexo = (SELECT sexo FROM vendedores WHERE codigo_vendedor = 201) WHERE codigo_vendedor = 200; Recuerde que al ACTUALIZA datos de una VISTA los est ACTUALIZANDO es la TABLA a la que est ligada. OTROS TIPOS DE INSERCION Muchas veces se quiere insertar en forma selectiva y dinmica, respecto a los campos o columnas, sobretodo dentro de programas PL/SQL, para evitar el mantenimiento de programas en caso que modifiquen las estructuras de las TABLAS. Insercin selectiva insert into lugares (tipo_lugar, codigo_lugar,nombre_lugar,codigo_ubica) values (M,34,'TUTA',2); Otras veces se requiere insertar en forma dinmica de una tabla a otra respecto a las filas. Borre los registros de la tabla cventas y ejecute el siguiente comando: insert into cventas select * from ventas where codigo_recibo <100; Insercin usando valor DEFAULT: insert into lugares values (35,'AQUITANIA',2,DEFAULT); El valor DEFAULT, tambin es vlido para UPDATE.

32

OTROS ASPECTOS DE LA SENTENCIA ALTER. Permite borrar selectivamente un Constraint. Alter table ventas drop constraint vent_ck_fopg; Permite adicionar una COLUMNA a una TABLA. Alter table cventas add (total number(6)); Permite cambiar el tipo de una COLUMNA, siempre y cuando no exista informacin en ninguna fila de dicha columna. Tambin se puede modificar el tamao de una COLUMNA; ampliar si tiene datos y reducir si esta todas las filas de la columna vacas. alter table cventas modify (total number(10));

SENTENCIA DROP Este comando Borra Objetos. Borrar USUARIO Drop user usu09; Borra TABLA Drop table cventas; Borra INDICE Drop index tabla_nx; Borra VISTA Drop view vclientes;

CREACION DE INDEX Este comando me permite definir ndices a tablas. Por defecto las llaves primarias son ndices, pero frecuentemente se requiere definir ndices alternos para agilizar consultas y otras operaciones sobre tablas. Para identificar ndices Alternos, que son diferentes a las llaves primarias, existe una regla que dice: Toda columna que es llave fornea se le debe crear un ndice para agilizar consultas. Se debe crear los ndices cuando: Una columna tiene un rango grande de valores Una columna contiene un nmero grande de valores nulos Cuando una o ms columnas se usa frecuentemente juntas

33

Cuando no se deben crear ndices La tabla es pequea Cuando las columnas no son usadas a menudo en la condicin de las consultas Cuando la tabla es actualizada frecuentemente Cuando las columnas del ndice son referenciadas como parte de una expresin En otros casos tambin se debe evaluar y dimensionar si una columna por la cantidad de consultas justifica definirle un ndice. Para crearle un ndice sobre las llaves forneas de la tabla ventas, la sintaxis es: create index ven_idx1 on ventas (codigo_vendedor,codigo_cliente); Si quiere verificar que exista ese ndice es select * from user_indexes;

CREACION DE SYNONYM Como se explic un sinnimo es un objeto que permite acceder a objetos de otro usuario, luego que este propietario conceda los permisos correspondientes. Lo anterior me evita tener objetos duplicados, por ejemplo (tablas) en usuarios diferentes, en cuyo caso, no solo ocupara ms espacio, sino que se desactualiza el objeto original respecto a la copia. Pensemos que el usuario LUIS le quiere compartir una de sus tablas VENTAS al usuario JULIA. Estando en el usuario dueo del objeto que quiere compartir (LUIS le quiere compartir a JULIA). grant select, insert,update,delete, references on ventas to julia; Ahora me ubico en el usuario JULIA y creo el synonym recordando que el dueo es LUIS. create synonym ventas for luis.ventas; Verifique que se cre el synonym.

34

OTROS PARAMETROS DE AMBIENTE SET. Permite personalizar o cambiar el aspecto al ambiente ORACLE en algunos aspectos. SET FEEDBACK OFF/ON Permite desactivar el mensaje de nmero de registros mostrados en una consulta. SET PAUSE OFF/ON Permite desactivar o activar la pausa entre cada pantalla al hacer una consulta. SET LINESIZE n Permite redefinir la longitud en nmero de columnas mostradas en una pantalla. SET PAGESIZE n Lo mismo anterior pero con lneas o filas. Se usa mucho en reportes inmediatos de SQL.

COMANDO SPOOL Se usa cuando se quiere guardar en un archivo tipo plano con extensin SQL todo lo trabajado en una sesin de SQL. Para habilitar el servicio es: SPOOL nombre_archivo Para finalizar el proceso es: SPOOL OFF. Luego se busca en el directorio de trabajo el archivo referenciado, para utilizarlo en lo que se quiera. Ejercicio: Qu vendedor tiene la mxima comisin? Cul es el costo del inventario actual de productos? Cul producto se ha vendido ms en Tunja? Relacione que vendedores han vendido el producto estrella, o sea el ms vendido. Qu clientes tienen copado el monto de crdito actualmente. Cul es el producto de menor existencia y cul fue la ltima vez que se vendi de este producto. Reconstruyan el mapa de dependencias del modelo de ventas a partir de las tablas del diccionario de datos:
user_objects user_constraints user_cons_columns

Genere un reporte que determine cantidad de ventas por ciudad para el ao de 1997. Construya el rbol que determine las ciudades en donde hay clientes y departamento al que pertenece.

35

Taller 6. SENTENCIAS Y FUNCIONES SQL NO ESTNDAR Y OTROS FORMATOS


Objetivo Conocer sentencias y funciones no estndar de SQL, pero que aumentan potencial a las consultas. Temas a tratar FUCIONES PARA MANIPULAR CARACTERES CONVERSIONES DE DATOS OTROS FORMATOS DE FECHA EXPRESIONES CONDICIONALES FULL, LEFT, RIGHT UOTER JOIN SUBQUERIES MULTIPLES USANDO IN ANY ALL MERGE START WITH CONNECT BY PRIOR

A partir de este laboratorio trabajaremos con el usuario HR del sistema. FUNCIONES PARA MANIPULAR CARACTERES
Concatenacin con literales

SELECT last_name || is a ||job_id AS "Employee Details" FROM employees; Defina una sentencia que cree un script para borrar todas las tablas del usuario. Como se condiciona un atributo tipo String.

SELECT last_name, job_id, department_id FROM employees WHERE last_name = Whalen; Y Utilizando el elemento LIKE que mejora?

SELECT last_name, job_id, department_id FROM employees WHERE last_name LIKE 'B%'; LIKE, tiene los siguientes filtros: % Representa una secuencia de ningn, uno o varios caracteres ms. _ Representa un simple carcter. Qu contestan la siguientes consultas:
SELECT last_name, hire_date FROM employees WHERE hire_date LIKE %95;

SELECT last_name FROM employees WHERE last_name LIKE _o%;

36 SELECT employee_id, last_name, job_id FROM employees WHERE job_id LIKE %SA\_% ESCAPE \;

Para ordenar se utiliza la clausula ORDER BY ASC DESC

SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date; SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date DESC;

OTRAS FUNCIONES PARA MANIPULAR CARACTERES.


CONCAT(Hello, World) SUBSTR(HelloWorld,1,5) LENGTH(HelloWorld) INSTR(HelloWorld, W) LPAD(salary,10,*) RPAD(salary, 10, *) TRIM(H FROM HelloWorld) HelloWorld Hello 10 6 *****24000 24000***** elloWorld

Comprenda las siguientes sentnecias

SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name), INSTR(last_name, a) "Contains a?" FROM employees WHERE SUBSTR(job_id, 4) = REP;

Investigar las siguientes funciones adicionales


NVL2 NULLIF COALESCE CASE

REPLACE

FUNCIONES PARA MANEJO DE FECHAS


La base de datos ORACLE almacena los atributos tipo fecha, en un esquema interno numrico, que representa: Centenario, ao, mes, da, hora, minutos y segundos. Como el formato normal corresponde a: DD-MON-YY, al suponer siguiente fecha: 07-JUN-94, esta se pude mostrar completa como: June 7th, 1994 5:10:43 p.m. Esta informacin almacenada internamente correspondera por ejemplo a: CENTURY YEAR MONTH DAY HOUR MINUTE SECOND 19 94 06 07 5 10 43 la

37

Solicite la fecha del sistema haciendo uso de la tabla comodn llamada dual.

Select sysdate from dual;

FORMATO DE FECHA RR

El formato RR es similar a YY, pero permite especificar diferentes senturias. El valor del ao depende al fecha actual del sistema.

Aritmtica con fechas Al estar almacenadas las fechas como nmeros, se puede ejecutar operaciones y clculos entre fechas. OPERACION Date + Number Date - Number Date - Date Date + Number/24 RESULTADO Date Date Nmero de das Date DESCRIPCION
Adiciona un nmero de das a Resta un nmero de das a la Resta una fecha a la otra nmero de das. Adiciona un nmero de horas la fecha fecha dndonos el a la fecha.

Qu hace la siguiente sentencia:

38

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS FROM employees WHERE department_id = 90;

Others Date Functions


Function Description MONTHS_BETWEEN(date1,date2) Number of months between two dates ADD_MONTHS(date,n) Add calendar months to date NEXT_DAY (date,char) Next day of the date specified LAST_DAY (date) Last day of the month ROUND(date) Round date TRUNC(date) Truncate date
Construya sentencias para cada uno anteriormente mencionadas. Por ejemplo: de las funciones

Select NEXT_DAY (01-SEP-95,VIERNES) from dual; Evalue las siguientes sentencias:

SELECT employee_id, hire_date, MONTHS_BETWEEN (SYSDATE, hire_date) ,ADD_MONTHS (hire_date, 6) REVIEW, NEXT_DAY (hire_date, VIERNES), LAST_DAY(hire_date) FROM employees WHERE MONTHS_BETWEEN (SYSDATE, hire_date) < 36;

Construya sentencias que evalue las siguientes funciones:


ROUND(SYSDATE,MONTH); ROUND(SYSDATE ,YEAR); TRUNC(SYSDATE ,MONTH); TRUNC(SYSDATE ,YEAR);

SELECT employee_id, hire_date, ROUND(hire_date, 'MONTH'), TRUNC(hire_date, 'MONTH') FROM employees WHERE hire_date LIKE '%97';

CONVERSIONES IMPLICITAS
From
VARCHAR2 VARCHAR2 NUMBER DATE NUMBER DATE VARCHAR2 VARCHAR2

To

39

Se resume en el uso de tres funciones: to_char,to_date, to_number. Concluya el uso del to_char, como se hace si queremos solo el ao?

SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month_Hired FROM employees WHERE last_name = 'Higgins'; Experimente con los dems formatos que se describen en el siguiente cuadro.

siguientes formatos: RM WW or W DDD or DD or D J

Descubra los

El mismo format de fecha contiene el manejo de porciones de fecha

40 Descubra los formatos de la siguientes sentencias:

select to_char(sysdate,'HH24:MI:SS') from dual; select to_char(sysdate,'HH24:MI:SS AM') from dual; select to_char(sysdate,'DD "de" MONTH') from dual; select to_char(sysdate,'ddspth') from dual;

OTROS FORMATOS DE TIEMPO

Ejecute las siguientes sentencias.

SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE FROM employees; SELECT last_name, TO_CHAR(hire_date, 'fmDdspth "de" Month YYYY fmHH:MI:SS AM') HIREDATE FROM employees

41

FUNCIONES ANIDADAS
Corresponde cuando se usa una funcin dentro de otra funcin, para buscar la compatibilidad de parmetros. Corra el siguiente sentencia y comprenda la lgica:

SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager') FROM employees WHERE manager_id IS NULL; Qu solicit el gerente en la siguiente sentencia.

SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(hire_date, 6), 'VIERNES'),'fmDay, Month DDth, YYYY') "Next 6 Month Review" FROM employees ORDER BY hire_date;

EXPRESIONES CONDICIONALES
Funciones que proveen una lgica por el estilo de los IF. Hay dos mtodos: Expresin CASE y la funcin DECODE. Revise el mtodo CASE:

SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END "REVISED_SALARY" FROM employees; Revise ahora DECODE:

SELECT last_name, salary, DECODE (TRUNC(salary/2000, 0), 0, 0.00, 1, 0.09, 2, 0.20, 3, 0.30, 4, 0.40, 5, 0.42, 6, 0.44, 0.45) TAX_RATE FROM employees WHERE department_id = 80

42

OUTER JOIN
Ejecute el siguiente LEFT OUTER JOIN. Equivale al (+)=

SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id);
Ejecute el siguiente RIGHT OUTER JOIN. Equivale al = (+)

SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id);
Ejecute el siguiente FULL OUTER JOIN.

SELECT e.last_name, e.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id);

CONSULTAS INTERNAS CON RETORNOS DE N-TUPLAS Y COMPARACIONES MULTIPLES Si la consulta interna devuelve n-tuplas, usted debe utilizar los siguientes operadores y los casos en los que se usan:

La consulta siguiente trabaja con un query anidado que retorna n-tuplas. Qu muestra esta consulta?:

43

SELECT last_name, salary, department_id FROM employees WHERE salary IN (SELECT MIN(salary) FROM employees GROUP BY department_id);

La consulta siguiente trabaja con ANY, que es sinnimo del operador SOME. En esta consulta, se muestran los empleados que no pertenecen a IT_PROG y su salario es menor que el de algn programador. Si observamos corriendo el query interno el mximo salario que gana un programador es $9.000:
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

Entonces las sentencias que usan estos operadores, tienen las siguientes equivalencias: < ANY, significa menor que el mximo del dominio resultante. > ANY, significa mayor que el valor mnimo del dominio resultante. = ANY, es equivalente a IN El operador All compara cada uno de los valores retornados por el subquery con el valor dado. El siguiente ejemplo muestra los empleados que tienen salario menor que el salario menor de todos los empleados con trabajo de IT_PROG y que el trabajo no corresponde a IT_PROG:
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

Las sentencias que usan estos operadores, tienen las siguientes equivalencias: < ALL, significa menor que el mnimo del dominio resultante. > ALL, corresponde a mayor que el mximo del dominio resultante. El operador NOT puede ser usado con IN, ANY y operadores ALL. Ejercicio: Muestre los empleados que tienen subordinados. Muestre el last name y hire date de los empleados que corresponden al mismo departamento de Zlotkey. Crear una consulta que muestre cuantos empleados ganan ms que el promedio del salario de la compaa. La misma consulta anterior, pero muestre el last name de cada uno de los empleado que cumplen esa
condicin, deben organizarse en orden ascendente del salario. Muestre el last name y salary de los empleados que son subalternos directos de King. Excluyendo a Zlotkey.

44

MERGE.
Permite inserta y actualizar condicionalmente. Para esto se hace con la sentencia MERGE: 1. 2. 3. 4. 5. Ejecuta una actualizacin si la tupla existe. Ejecuta un insert si la tupla no existe. Permite actualizaciones separadas. Incrementa el rendimiento y facilidad de uso. Es muy utilizada en aplicaciones de bodega de datos (data warehousing).

INTO, especifica la tabal objetivo en la cual usted va a actualizar e insertar. USING, identifica la fuente de los datos a ser actualizados o insertados, esta fuente puede ser una tabla, vista, o subquery. ON, corresponde a la condicin sobre la cual el merge opera, ya sea para actualizar o para insertar. WHEN MATCHED, Le define al servidor cmo responder o dar resultado al join condition. Cree una tabla copia de employees (vaca o solo la estrucutra):
create table copy_emp as select * from employees where employee_id=0;

Corra el Siguiente MERGE:


MERGE INTO copy_emp c USING employees e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET c.first_name = e.first_name, c.last_name = e.last_name, c.email = e.email, c.phone_number = e.phone_number,

45

c.hire_date = e.hire_date, c.job_id = e.job_id, c.salary = e.salary, c.commission_pct = e.commission_pct, c.manager_id = e.manager_id, c.department_id = e.department_id WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name, e.email, e.phone_number, e.hire_date, e.job_id, e.salary, e.commission_pct, e.manager_id, e.department_id);

START WITH y CONNECT BY PRIOR PARA RECUPERACION JERARQUICA Cuando se tiene tablas recursivas, recuperar sus datos, corresponde a un ejercicio de construccin de un rbol cuyas dependencias o jerarquas, se debe hacer con recorridos recursivos. Estos rboles tienen un padre y sus descendientes a varios niveles hasta llegar a las hojas o nivel ms bajo de la relacin.

Para retornar el nombre de todos los empleados, y su dependencia corresponde a la relacin de ste con su jefe. O relacin entre padre e hijo en el rbol. (connect by prior employee_id=manager_id). Para esto se debe definir un punto inicial o padre, no necesariamente la cabeza. (START WITH)

46

Tambin es deseable conocer el nivel o altura en el que se encuentra el empleado respecto a la jerarqua. (Pseudocolumna LEVEL) Inicialmente conozca la estructura de la tabla employees y sus datos:
Desc employees; select EMPLOYEE_ID, last_name, manager_id from employees order by 1;

Ahora si corra la siguiente sentencia:


select last_name, sys_connect_by_path(last_name,' / ') as JERARQUIA, LEVEL from employees where LEVEL < 4 start with employee_id = '100' connect by prior employee_id = manager_id

Explique qu sucede si hacemos el siguiente cambio:


select last_name, sys_connect_by_path(last_name,' / ') as JERARQUIA, LEVEL from employees where LEVEL < 4 start with employee_id = '200' connect by prior manager_id=employee_id

47

Taller 7. Transacciones en una Base de Datos.


Objetivo Conocer las sentencias que nos permiten definir y manejar la consistencia y estado y control de transacciones. Recursos del DBMS. Tablas Sentencias. Commit Rollback Savepoint Cuando inicia y termina una transaccin? Una transaccin inicia cuando ocurre la primera sentencia DML y termina cundo sucede alguna de las siguientes situaciones: Ocurre COMMIT o un ROLLBACK Ocurre una sentencia DDL (por ejemplo CREATE) Ocurre una sentencia DCL (por ejemplo REVOKE) Cierra/abre la sesin el usuario La mquina o el sistema fallan Al finalizar la transaccin, la siguiente sentencia SQL automticamente inicia otra transaccin. Los anteriores mecanismos aseguran la consistencia de los datos.

48

Sentencia COMMIT

SAVEPOINT name ROLLBACK ROLLBACK TO SAVEPOINT name

Descripcin Finaliza la transaccin, dejando permanentes todos los cambios pendientes en los datos. Marca un punto dentro de una transaccin

Finaliza una transaccin, deshaciendo o descartando todos los cambios pendientes en los datos. ROLLBACK TO SAVEPOINT Deshace la transaccin descartando todos los cambios, desde el punto especificado con anterioridad.

Situacin o estado de los datos despus de un COMMIT Los cambios en los datos quedan permanente en la base de datos El estado anterior de los datos se afecta permanentemente. Todos los usuarios pueden ver los resultados Los Locks o candados que permanecan en las columnas desaparecen, quedando libres para otros usuarios Todos los savepoints son borrados Actividades

Experimentemos los cambios sobre alguna informacin para verificar lo expuesto anteriormente. Actualicemos la siguiente informacin.
DELETE FROM employees WHERE employee_id = 99999; 1 row deleted. INSERT INTO departments VALUES (290, Corporate Tax, NULL, 1700);

Confirme cambios.
COMMIT;

Cree una copia de tabla empleados utilizando un subquery.


create table copy_emp as select * from employees;

Borre todos los registros de esta nueva tabla


DELETE FROM copy_emp;

Verifique el borrado
Select * from copy_emp;

49

Deshaga la anterior operacin


ROLLBACK; ELERCICIO: Haga la prueba de transaccin, utilizando Savepoint.

50

Taller 8. Operadores SET.


Objetivo Conocer los operadores SET: Union, intersect y minus. Recursos del DBMS. Tables Sentencias. Select Union Intersect Minus Los operadores SET

Estos operadores permiten combinar resultados de dos o ms queries en un solo resultado.

Operador
UNION UNION ALL INTERSECT MINUS

Retorno
Todas las tuplas distintas seleccionadas por cada querie Todas las tuplas seleccionadas por cada querie, incluyendo las duplicadas Todas las tuplas distintas seleccionadas por ambos queries Todas las tuplas distintas que son seleccionadas por el primer select y las no seleccionadas en el segundo select

51 Actividades

Comprender el funcionamiento de los operadores SET Seleccionar todos los empleados comunes:
SELECT employee_id, job_id FROM employees UNION SELECT employee_id, job_id FROM job_history;

Compare estas dos consultas:


SELECT employee_id, job_id, department_id FROM employees UNION ALL SELECT employee_id, job_id, department_id FROM job_history ORDER BY employee_id;

Cuales empleados tiene en comn estas dos tablas:


SELECT employee_id, job_id FROM employees INTERSECT SELECT employee_id, job_id FROM job_history;

Interprete este resultado:


SELECT employee_id,job_id FROM employees MINUS SELECT employee_id,job_id FROM job_history;

Revise el condicional Where e interprete este resultado:


SELECT employee_id, department_id FROM employees WHERE (employee_id, department_id)IN (SELECT employee_id, department_id FROM employees UNION SELECT employee_id, department_id FROM job_history);

Para utilizar los operadores SET, se deben asegurar que coincidan las columnas a mostrar en el select, tanto en nmero como en tipo y orden. Existen momentos en que para poder utilizar este recurso se debe forzar la coincidencia, haciendo conversiones de tipos de datos:

52

SELECT department_id, TO_NUMBER(null) location, hire_date FROM employees UNION SELECT department_id, location_id, TO_DATE(null) FROM departments;

Otro ejemplo:
SELECT employee_id, job_id,salary FROM employees UNION SELECT employee_id, job_id,0 FROM job_history;

53

Taller 9. Operadores Especiales de agrupacin.


Objetivo Conocer los operadores especiales de agrupacin como rollup, cube y grouping Recursos del DBMS. Tables Sentencias. Rollup Cube grouping Las funciones de grupo

Opera sobre un grupo de tuplas, generando un total o resultado por grupo.

La clausula group by, divide las tuplas por grupos, donde se retorna informacin sumarizada en cada grupo.

Un ejemplo de group by corresponde a la siguiente consulta:


SELECT department_id, job_id, SUM(salary), COUNT(employee_id) FROM employees GROUP BY department_id, job_id ORDER BY 1,2;

Otro ejemplo de group by corresponde a la siguiente consulta, donde se usa having cuando quiero condicionar la funcin de grupo:
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) >9500;

ROLLUP, corresponde a una extensin del group by, donde este operador permite sumarizar o acumular tanto por subgrupos de segundo nivel, como un subtotal del grupo y un gran total general:
SELECT department_id, job_id, SUM(salary) FROM employees WHERE department_id < 60

54

GROUP BY ROLLUP(department_id, job_id);

CUBE, corresponde a un operador que es una extensin del group by, este puede aplicarse a todas las funciones de agregacin. Produce resultados que se usa en reportes tabulares cruzados (cross-tabular reports). Es mucho ms verstil que rollup, ya que puede generar subtotales en casi todas las combinaciones :
SELECT department_id, job_id, SUM(salary) FROM employees WHERE department_id < 60 GROUP BY CUBE (department_id, job_id);

Vous aimerez peut-être aussi