lunes, 21 de abril de 2014

Tarea 4 - Secuencias, Indices y Sinonimos


--Generamos las sequencias requeridas para las tablas.
--Sequence para Factura
CREATE SEQUENCE FacturaSeq
  MINVALUE 1
  MAXVALUE 99999
  START WITH 1
  INCREMENT BY 1
  NOCACHE;

--Sequence para Detalle
CREATE SEQUENCE DetalleSeq
  MINVALUE 1
  MAXVALUE 99999
  START WITH 1
  INCREMENT BY 1
  CACHE 10;

--Creamos las tablas
CREATE TABLE Factura (
FacturaId NUMBER(5) not null constraint factura_pk primary key,
Folio NUMBER (5) not null,
RutCliente VARCHAR2(10) not null,
FechaEmision date);


CREATE TABLE FacturaDetalle (
DetalleId number(5) not null constraint detalle_pk primary key,
FacturaId number(5) not null constraint FacturaDetalle_fk REFERENCES Factura(FacturaId),
CodigoBarraProducto varchar2(13) not null,
Cantidad number(2) not null,
PrecioUnitario number(5) not null);

/*
Algo necesario para saber sobre indices
Un índice único garantiza que no haya dos filas de una tabla con valores duplicados en lacolumna que define el índice.
Una clave de índice único sólo puede apuntar a una fila de latabla.

En un índice no único, una clave sencilla puede tener múltiples filas asociadas con ella.
*/
--En la tabla factura crearemos 2 indices
Create index FacturaFolioIdx on Factura(Folio);

Create index FacturaRutFechaIdx on Factura(RutCliente, FechaEmision);

--Insertamos datos
INSERT INTO Factura(FacturaId, Folio, RutCliente, FechaEmision)
VALUES (FacturaSeq.NEXTVAL, 250,'78000250', to_date('20140420','YYYY-MM-DD'));


INSERT INTO FacturaDetalle(DetalleId, FacturaId, CodigoBarraProducto, Cantidad, PrecioUnitario)
VALUES (DetalleSeq.NEXTVAL, 1,'781234567891', 1, 1500);

INSERT INTO FacturaDetalle(DetalleId, FacturaId, CodigoBarraProducto, Cantidad, PrecioUnitario)
VALUES (DetalleSeq.NEXTVAL, 1,'781234567892', 2, 2500);

INSERT INTO FacturaDetalle(DetalleId, FacturaId, CodigoBarraProducto, Cantidad, PrecioUnitario)
VALUES (DetalleSeq.NEXTVAL, 1,'781234567893', 3, 3000);


/*Un sinónimo es un nombre alternativo que identifica un tabla en la base de datos.
Con un sinónimo se pretende normalmente simplicar el nombre original de la tabla,
aunque tambien se suelen utilizar para evitar tener que escribir el nombre del propietario de la tabla.
*/
--ahora crearemos un sinonimo para la tabla detalle
Create SYNONYM Detalle
FOR FacturaDetalle;

Select * from Detalle;

sábado, 12 de abril de 2014

Tarea 3 - Practica de Vistas

Tarea 3 - Practica de Vistas.


Creación vista simple,seleccionando los empleados pertenecientes al departamento, numero 40.y concatenando Nombre y apellido.

CREATE view programadores 

(Departamento,Nombre,Mail)
As SELECT departamento_id,nombre_empleado||' '|| apellido_empleado,email_empleado
from EMPLEADO 

where departamento_id = 40;


*********************************************************************************************
Creación de vista Compleja.

CREATE view Personal_x_departamento 

(Departamento,Cantidad)
As SELECT nombre_departamento, count (empleado_id)
from EMPLEADO e
inner join DEPARTAMENTO d on(e.departamento_id= d.departamento_id)

GROUP by d.NOMBRE_DEPARTAMENTO;



********************************************************************************************

Vistas con restricciones

CREATE view programadores_check 

(Departamento,Nombre,Mail)
As SELECT departamento_id,nombre_empleado||' '|| apellido_empleado,email_empleado
from EMPLEADO 
where departamento_id = 40

with check option constraint programadores_ck;


*********************************************************************************************


Eliminar vista



drop view programadores ;


*********************************************************************************************


Intentar Modificar


update programadores_check set departamento=('20');


Error:

update programadores_check set departamento=('20')
Informe de error -
Error SQL: ORA-01402: view WITH CHECK OPTION where-clause violation

01402. 00000 -  "view WITH CHECK OPTION where-clause violation"


Tarea 2 - Comando ALTER TABLE

El comando ALTER TABLE permite modificar la definición de una tabla. En específico permite cambiar tipos de datos de un campo, las restricciones, los largos de un dato, agregar columnas, eliminar columnas, entre otros.


El código para realizar esto es el siguiente:


Sintaxis:

ALTER TABLE [nombre_tabla] ADD [nombre_columna] [definición_columna];

Ejemplo:
Utilizando el compilador online sqlfiddle, realizaremos primero la creación del schema y luego lo modificaremos (importante, utilice el motor Oracle 11g R2)


Creación del Schema o tabla:

CREATE TABLE departamento(
 departamento_id number(4) NOT NULL CONSTRAINT pk_departamento_id PRIMARY KEY,
 nombre_departamento varchar2(30) NOT NULL
);


Alter table , sintaxis


  ALTER TABLE departamento ADD num_empleados number(3)
  ADD CONSTRAINT ck_num_emp CHECK (num_empleado > 0);


En el caso anterior modificamos la tabla para agregar una columna que permita guardar el números de empleados y además valide que este sea mayor a 0 


Eliminemos una columna

Sintaxis: 
ALTER TABLE departamento DROP COLUMN num_empleados;


Podemos validar lo anterior en el siguiente enlace
http://sqlfiddle.com/#!4/4b72de 




viernes, 4 de abril de 2014

Creacion_Tablas_Trabajo1

/*==============================================================*/
/* BORRADO DE TABLAS */
/*==============================================================*/

drop table departamento cascade constraints;

drop table empleado cascade constraints;


/*==============================================================*/
/* Tabla: departamento */
/*==============================================================*/

create table departamento(
departamento_id number(4) not null constraint pk_departamento_id Primary key,
nombre_departamento varchar2(30) not null
);

/*==============================================================*/
/* Tabla: empleado */
/*==============================================================*/

create table empleado(
empleado_id number(4) not null constraint pk_empleado_id Primary key,
nombre_empleado varchar2(30) not null,
apellido_empleado varchar2(30) not null,
email_empleado varchar2(30) not null constraint unik_empleado_mail unique,
departamento_id number(4) not null constraint ref_emp_depto references departamento (departamento_id)
);

/*==============================================================*/
/*= P o b l a m i e n t o d e t a b l a s =*/
/*==============================================================*/

/*==============================================================*/
/* datos: departamento */
/*==============================================================*/
insert into departamento values(10,'Gerencia');
insert into departamento values(20,'Administracion');
insert into departamento values(30,'Produccion');
insert into departamento values(40,'Developer');
insert into departamento values(50,'RRHH');

/*==============================================================*/
/* datos: empleado */
/*==============================================================*/
insert into empleado values(101,'Marco','De la Rivera','m_delarivera@yahoo.es',40);
insert into empleado values(102,'Fancisco','Chavez','francisco.chavez@outlook.cl',10);
insert into empleado values(103,'Gerardo','Gutierrez','ggmiquel@yahoo.com',40);
insert into empleado values(104,'Miguel Angel','Avendano','migaven@gmail.com',20);
insert into empleado values(105,'Nicol','Pantoja','nicoledaphne@gmail.com',50);