martes, 6 de diciembre de 2011

¿Que es Oracle Forms?

Como bien se entiende en el título es una herramienta de Oracle y su principal cometido es el desarrollo rápido de aplicaciones, sobre todo de gestión. También se puede considerar como un lenguaje 4gl, es decir, de cuarta generación.

Llevo trabajando más de 10 años con Oracle Forms, desde la versión 4.5, 6i y ahora con la 10g, mé he saltado la 9.

Las versiones 4.5 y la 6.0 funcionan en el modelo Cliente/Servidor. La 6i funciona en web aparte de en Cliente/Servidor, y a partir de la versión 9 (se han saltado la 7 y 8) solo funciona en entorno web.

Para el funcionamiento en web usa un applet, por lo que es necesario tener instalado el plug-in de Java en el ordenador que abra la aplicación.

La versión 6i en web no tengo experiencia de como va, lo que he visto de 10g no tiene mala pinta.

jueves, 17 de noviembre de 2011

viernes, 11 de noviembre de 2011

Calculadoras

CALCULADORA EN JAVASCRIPT

CALCULADORA NORMAL

Número 1 Número 2
SUMA RESTA MULTIPLICACIÓN DIVISIÓN
Num1 % de Num2 Num1^Num2 Max(num1,num2) Min(num1,num2)

CALCULADORA CIENTÍFICA

Número
ABS(num) Seno(num) Cos(num) Tan(num)
Raiz(num) ArcoSeno(num) ArcoCos(num) ArcoTan(num)

jueves, 10 de noviembre de 2011

primer package calculadora

create or replace package pkgCalculadora is
function suma(p1 number, p2 number) return number;
function resta(p1 number, p2 number) return number;
function multiplica(p1 number, p2 number) return number;
function divide(p1 number, p2 number) return number;
function numeroFactorial(p1 number) return number;
function exponenteAlCuadrado(p1 number) return number;
function exponenteAlcubo(p1 number) return number;
end pkgCalculadora;
create or replace package body pkgCalculadora is
procedure imprime (pvalor number) is
begin dbms_output.put_line('Resultado: ' pvalor);
end imprime;
function suma(p1 number, p2 number) return number is
Begin imprime(p1+p2); return p1+p2;
End suma;
function resta(p1 number, p2 number) return number is
Begin imprime(p1-p2); return p1-p2;
End resta;
function multiplica(p1 number, p2 number) return number is
Begin imprime(p1*p2); return p1*p2;
End multiplica;
function divide(p1 number, p2 number) return number is
Begin imprime(p1/p2); return p1/p2;
EXCEPTION when Zero_divide then dbms_output.put_line ('Error !! Division por Cero');
End divide;
function numeroFactorial(p1 number) return number is
beginres =i;
for(i=1;i<=p1;i++);
res =res*i;
return res;
end numeroFactorial;
function exponenteAlCuadrado(p1 number) return number is
Begin imprime(p1*p1); return p1*p1;
End multiplica;
function exponenteAlcubo(p1 number) return number is
Begin imprime(p1*p1*p1); return p1*p1*p1;
End multiplica;
end pkgCalculadora;
declare r number(10);begin r := pkgCalculadora.suma(2, 3);
end;

que son los packages

Un package (paquete) es una estructura que agrupa objetos compilados(procedimientos, funciones, variables, etc.) en la base de datos.
Generalmente se utiliza para agrupar objetos del mismo proceso de negocio o cuyos objetivos estén relacionados
 
Un package tiene dos partes:
Especificación(encabezado): Se declaran los objetos (procedimientos, funciones, variables, etc.) que son de uso público. Sólo es declaración, no contiene código.
Cuerpo(contenido): Contiene el código de los objetos declarados en la especificación. También se declaran y contienen los objetos (procedimientos, funciones, variables, etc.) que son de uso privado

trigger resuelto segunda solemne

create or replace trigger trCuentaBancaria
after insert on giro
for each row
declare
vsaldoCuenta cuenta.saldo%type;
vsaldoLinea lineaCredito.saldo%type;
vIdLineaCredito lineaCredito.idLinea%type;
vLineaUsada integer;
begin
select saldo into vsaldoCuenta
where idCuenta = :new.idCuenta;
select saldo, idLinea into vsaldoLinea, vIdLineaCredito
from lineaCredito
where idCuenta = :new.idCuenta;
if :new.monto> vsaldoCuenta + vsaldoLinea then
dbms_output.put_line('Error No hay saldo suficiente disponible');
else if :new.monto <= vsaldoCuenta then
update cuenta
set Saldo = saldo - :new.monto
where idCuenta = :new.idCuenta;
else update cuenta
set Saldo = 0
where idCuenta = :new.idCuenta;
update lineaCredito
set saldo = saldo - vLineaUsada
where idCuenta = :new.idCuenta; vlineaUsada = vSaldoCuenta-vSaldoLinea;
insert into UsoLinea values(seqUsoLinea.nextval,vIdLineaCredito,sysdate,vlineausada)
end if;
end if;
end;

jueves, 20 de octubre de 2011

Clase 20 de octubre TRIGGER!!

//crear la tabla autor y libro

create table auto(idAutor integer primary key,nombre varchar2(30));
create table libro(idLibro integer primary key,nombrelibro varchar2(30),idAutor references autor);

// inserciones

insert into autor values(1'erwin');
insert into autor values(2'soilaCerda');
insert into autor values(3'rosamel fierro');
insert into autor values(4'marichu palacios');

insert into libro values(1'introduccion a oracle'1);
insert into libro values(2'kamasutra'2);
insert into libro values(3'las mil y una noche'3);
insert into libro values(4'la parcela de erwin'4);


// Contador
select * autor;

select idAutoe, count(*)
from libro
group by idAutor
order by 2 desc;

// trigger

create or replace trigger cascadaDelete
alter delete on autor
for each row
begin
delete from libro
where idAutor = :old.idAutor;
end;

delete from auto
where nombre = 'erwin';


Desactivar trigger
alter trigger cascadaDelete disable;

---------------------------------------------------------------------------------------------------------

create table producto(idProducto integer primary key,nombreProducto varchar2(30),stockActual integer);
create table compra(idCompra integer primary key,fecha date);
create table detalleCompra(idCompra reference compra,idProducto reference producto,cantidad integer);
create table merma(idMerma integer primary key,fecha date ,idProducto integer references producto,cantidad integer);

create or replace trigger actualizaStock
after insert on detalleCompra
for each row
begin
update producto
set stockActual = stockActual + :new.cantidad;
where idProducto = :new.idProducto;
end;

create or replace trigger cantidadMerma
alter insert on merma
for each row
begin
update producto
set tockActual = stockActual - :new.cantidad;
where idProducto = :new.idProducto;
end;

martes, 20 de septiembre de 2011

Distintos tipos de funciones y ejemplos con SQL para Oracle.

                                                        Conjunto de Funciones: 


Funciones de valores simples: 

ABS(n)= Devuelve el valor absoluto de (n). 
CEIL(n)=Obtiene el valor entero inmediatamente superior o igual a "n". 
FLOOR(n) = Devuelve el valor entero inmediatamente inferior o igual a "n". 
MOD (m, n)= Devuelve el resto resultante de dividir "m" entre "n". 
NVL (valor, expresión)= Sustituye un valor nulo por otro valor. 
POWER (m, exponente)= Calcula la potencia de un numero. 
ROUND (numero [, m])= Redondea números con el numero de dígitos de precisión indicados. 
SIGN (valor)= Indica el signo del "valor". 
SQRT(n)= Devuelve la raíz cuadrada de "n". 
TRUNC (numero, [m])= Trunca números para que tengan una cierta cantidad de dígitos de precisión. 
VAIRANCE (valor)= Devuelve la varianza de un conjunto de valores. 

Funciones de grupos de valores: 

AVG(n)= Calcula el valor medio de "n" ignorando los valores nulos. 
COUNT (* | Expresión)= Cuenta el numero de veces que la expresión evalúa algún dato con valor no nulo. La opción "*" cuenta todas las filas seleccionadas. 
MAX (expresión)= Calcula el máximo. 
MIN (expresión)= Calcula el mínimo. 
SUM (expresión)= Obtiene la suma de los valores de la expresión. 
GREATEST (valor1, valor2…)= Obtiene el mayor valor de la lista. 
LEAST (valor1, valor2…)= Obtiene el menor valor de la lista. 

Funciones que devuelven valores de caracteres: 

CHR(n) = Devuelve el carácter cuyo valor en binario es equivalente a "n". 
CONCAT (cad1, cad2)= Devuelve "cad1" concatenada con "cad2". 
LOWER (cad)= Devuelve la cadena "cad" en minúsculas. 
UPPER (cad)= Devuelve la cadena "cad" en mayúsculas. 
INITCAP (cad)= Convierte la cadena "cad" a tipo titulo. 
LPAD (cad1, n[,cad2])= Añade caracteres a la izquierda de la cadena hasta que tiene una cierta longitud. 
RPAD (cad1, n[,cad2])= Añade caracteres a la derecha de la cadena hasta que tiene una cierta longitud. 
LTRIM (cad [,set])= Suprime un conjunto de caracteres a la izquierda de la cadena. 
RTRIM (cad [,set])= Suprime un conjunto de caracteres a la derecha de la cadena. 
REPLACE (cad, cadena_busqueda [, cadena_sustitucion])= Sustituye un carácter o caracteres de una cadena con 0 o mas caracteres. 
SUBSTR (cad, m [,n])= Obtiene parte de una cadena. 
TRANSLATE (cad1, cad2, cad3)= Convierte caracteres de una cadena en caracteres diferentes, según un plan de sustitución marcado por el usuario. 

Funciones que devuelven valores numéricos: 

ASCII(cad)= Devuelve el valor ASCII de la primera letra de la cadena "cad". 
INSTR (cad1, cad2 [, comienzo [,m]])= Permite una búsqueda de un conjunto de caracteres en una cadena pero no suprime ningún carácter después. 
LENGTH (cad)= Devuelve el numero de caracteres de cad. 

Funciones para el manejo de fechas: 

SYSDATE= Devuelve la fecha del sistema. 
ADD_MONTHS (fecha, n)= Devuelve la fecha "fecha" incrementada en "n" meses. 
LAST_DAY (fecha)= Devuelve la fecha del último día del mes que contiene "fecha". 
MONTHS_BETWEEN (fecha1, fecha2)= Devuelve la diferencia en meses entre las fechas "fecha1" y "fecha2". 
NEXT_DAY (fecha, cad)= Devuelve la fecha del primer día de la semana indicado por "cad" después de la fecha indicada por "fecha". 

Funciones de conversión: 

TO_CHAR= Transforma un tipo DATE ó NUMBER en una cadena de caracteres. 
TO_DATE= Transforma un tipo NUMBER ó CHAR en DATE. 
TO_NUMBER= Transforma una cadena de caracteres en NUMBER.


Ejemplo: 


CREATE OR REPLACE FUNCTION isnumeric (p_string_value IN VARCHAR2)RETURN BOOLEAN
AS

test_value NUMERIC;
BEGIN
BEGIN
test_value := TO_NUMBER (p_string_value);
RETURN (true);

EXCEPTION
WHEN OTHERS THEN
RETURN (false);
END;
END isnumeric;




miércoles, 7 de septiembre de 2011

Clase del 06 de septiembre

En esta clase Declaramos 2 Cursores, uno de ellos recibia el atributo del otro
y ademas le incluimos un contador al segundo cursor.

DECLARE
CURSOR crListaAtributos(pNombreTabla varchar2) is
SELECT column_name ,DATA_TYPE
FROM all_tab_columns
WHERE table_name = pNombreTabla;

CURSOR crListaTablas is
SELECT distinct tablas.table_name
FROM all_tables tablas
WHERE table_name not like '%$%'
AND upper(owner) not like '%SYS%';
vNombreTabla all_tables.table_name%type;
vAtributoTabla all_tab_columns.table_name%type;
vTipoDato all_tab_columns.DATA_TYPE%type;
contadorAtributos integer;
BEGIN
OPEN crListaTablas;
loop
FETCH crListaTablas into vNombreTabla;
exit when crListaTablas%notfound;
dbms_output.put_line('•••••••••••••••••••••••••••••••••••');
dbms_output.put_line(vNombreTabla);
dbms_output.put_line('------------------------------------------');

OPEN crListaAtributos(vNombreTabla);
contadorAtributos := 0;
loop
FETCH crListaAtributos into vAtributoTabla, vTipoDato;
exit when crListaAtributos%notfound;
dbms_output.put_line(vAtributoTabla||' *'||vTipoDato);
contadorAtributos := (contadorAtributos+1);
end loop;
dbms_output.put_line('------------------------------------------');
dbms_output.put_line('TOTAL ATRIBUTOS :'||contadorAtributos);
CLOSE crListaAtributos;
end loop;
CLOSE crListaTablas;
end;

lunes, 5 de septiembre de 2011

Cursor por Fabián Moya G.


Desarrollar un cursor que permita investigar a cada Empleado que el inicio de su contrato laboral supere los 7 años de antigüedad detallado en la tabla JOB_HISTORY, ahi que señalar "Años de servicio"donde se generara un registro en la tabla "Antiguedad_Empleado" para cada trabajador . En esta tabla se debe almacenar: ID empleado, ID departamento, salario y la fecha de inicio del contrato y un comentario para aquellos empleados que cumplan con lo solicitado.


jueves, 1 de septiembre de 2011

Tarea 1 - Diseño de un cursor para estudio de renta de empleados


Solución del cursor :

Antes de declarar el cursor crear la tabla  "estudioSueldo"  :


create table estudioSueldo(
id_empleado number(6),
nombre varchar2(20),
apellido varchar2(25),
renta number(8,2),
promedio number(8,2),
mensaje varchar2(30))



Cursor:

declare
cursor cr_empleado is
select first_name, last_name, e.job_id, employee_id, salary
from employees e, jobs j
where e.job_id=j.job_id
and (lower(job_title)='finance manager'
or upper(job_title)='PROGRAMMER');
vnombre employees.first_name%type;
vapellido employees.last_name%type;
vjob_id employees.job_id%type;
vempleado_id employees.employee_id%type;
vsueldo employees.salary%type;
vsueldomin employees.salary%type;
vsueldomax employees.salary%type;
vpromedio number(8,2);
vmensaje varchar2(30);
begin
open cr_empleado;
loop
FETCH cr_empleado INTO vnombre, vapellido, vjob_id, vempleado_id,
vsueldo;
exit when cr_empleado%NOTFOUND;
DBMS_output.put_line(vnombre ||' '|| vapellido ||' '|| vjob_id
||' '|| vempleado_id ||' '|| vsueldo);
--traer el valor min y max para ver si el promedio coincide
select min_salary, max_salary into vsueldomin, vsueldomax
from jobs
where vjob_id=job_id;
vpromedio:=(vsueldomin + vsueldomax)/2;
if vsueldo >= vpromedio then
vmensaje := 'evaluar carga de trabajo';
else
vmensaje := 'estudiar un aumento';
end if;
end loop;
DBMS_output.put_line(vmensaje);
close cr_empleado;
end

Enunciado cursor


Se desea implementar una base de datos para facilitar la gestión y administración de un cementerio, en dicha base de datos se contemplan diferentes categorías laborales, distintos tipos de enterramiento, facturas por los servicios prestados, incluso se permite que una familia posea su propio panteón para un determinado número de personas.
El cementerio está dividido en sectores, teniendo estos una capacidad y extensión variable que ha de quedar reflejada.
Asimismo se ha quiere tener información sobre los empleados mediante datos personales como nombre y apellidos,dirección, telefóno, salario, antigüedad, etc.

Cursor:





Datos de un Cursor

ceao duoc facebook

centrodealumnosao@gmail.com



declare

_________
_________
_________ variables
_________
_________ cursores

begin
_________
_________
_________
_________

exception
_________
_________
_________
_________
end;


select
from
where
having ( va asociado al group by)
group by
order by


select * from tab



select department_name as "departamento",count(*) as "total empleados"
from employees E,departments D
where E.department_id = D.department_id
having count (employee_id)> 3
group by department_name
order by department_name

desc departments

select * from employees


declare
cursor myCursor is
select department_id, count(*)as "total Empleados"
from employees
group by department_id
order by department_id;
vDepartamento employees.employee_id%type;
vTotalEmpleados integer;
begin
open myCursor;
loop
fetch myCursor into vDepartamento,vTotalEmpleados;
exit when myCursor%notfound;
dbms_output.put_line(vDepartamento || ' ' || vTotalEmpleados);
end loop;
close myCursor;
end

select department_name
from departments
where department_id = 10




declare
vNumDepto integer := 10;
vNomDepto varchar2(30);

begin
select department_name into vNomDepto
from departments
where department_id = vNumDepto;


dbms_output.put_line('el codigo del departamento es : ' || vNumDepto);
dbms_output.put_line('el codigo del departamento es : ' || vNomDepto);
end

cursor 29-ago.2011

permita Estudiar los empleados
--cuyo cargo sea finance_manager o programmer.
--Para aquellos que tienen una renta Menor o igual que el promedio
--entre el valor min y max, definido en la tabla jobs
-- debe indicar "estudiar un aumento".
--Para los que tienen una renta superior al promedio
--hay que indicar "evaluar carga de trabajo".
--Generando un registro en la tabla "estudioSueldo" para cada empleado
--En dicha tabla se debe grabar:
--el ID del Empleado, su Nombre, el Apellido
--La renta, la diferencia con el promedio y el comentario

Cursor: 


declare
cursor cr_empleado is
select first_name, last_name, e.job_id, employee_id, salary
from employees e, jobs j
where e.job_id=j.job_id
and (lower(job_title)='finance manager'
or upper(job_title)='PROGRAMMER');
vnombre employees.first_name%type;
vapellido employees.last_name%type;
vjob_id employees.job_id%type;
vempleado_id employees.employee_id%type;
vsueldo employees.salary%type;
vsueldomin employees.salary%type;
vsueldomax employees.salary%type;
vpromedio number(8,2);
vmensaje estudioSueldo.mensaje%type;
begin
open cr_empleado;
loop
FETCH cr_empleado INTO vnombre, vapellido, vjob_id, vempleado_id,
vsueldo;
exit when cr_empleado%NOTFOUND;
DBMS_output.put_line(vnombre ||' '|| vapellido ||' '|| vjob_id
||' '|| vempleado_id ||' '|| vsueldo);
--traer el valor min y max para ver si el promedio coincide
select min_salary, max_salary into vsueldomin, vsueldomax
from jobs
where vjob_id=job_id;
vpromedio:=(vsueldomin + vsueldomax)/2;
if vsueldo >= vpromedio then
vmensaje := 'evaluar carga de trabajo';
else
vmensaje := 'estudiar un aumento';
end if;
end loop;
DBMS_output.put_line(vmensaje);
close cr_empleado;
end

cursor para encontrar los empleados por departamento

DECLARE
CURSOR myCursor is
SELECT DEPARTMENT_ID, count(*)
FROM employees
WHERE DEPARTMENT_ID is not NULL
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID;
vDepartamento employees.employee_id%type;
vTotalEmpleados integer;
vNomDepto char(20);
vMensaje varchar2(20);
BEGIN
OPEN myCursor;
DBMS_output.put_line('Departamento Total empleados');
LOOP
FETCH myCursor INTO vDepartamento, vTotalEmpleados;
EXIT WHEN myCursor%NOTFOUND;

SELECT DEPARTMENT_NAME INTO vNomDepto
FROM DEPARTMENTS
WHERE DEPARTMENT_ID = vDepartamento;

IF vTotalEmpleados > 5 THEN
vMensaje := 'Departamento Grande';
ELSE
vMensaje := 'Departamento Chico';
END IF;

DBMS_output.put_line(vNomDepto||''||
vTotalEmpleados||' '||vMensaje);
END LOOP;
CLOSE myCursor;
END

martes, 23 de agosto de 2011

Clase de hoy: Resolvimos el problema de la clase pasada. [Parte 2]

Declare
Cursor myCursor is Select department_id, count(*) as "total empleados"
from employees
where Department_id is not null;
group by department_id
order by department_id;
vDepartamento employees.employee_id%type;
vTotalEmpleados integer;
vNomDepto varchar2(30);
Begin
 Open myCursor;
 Loop
     FETCH myCursor into vDepartamento, VTotalEmpleados;
Exit when myCursor%NOTFOUND;
Select Department_Name into vNomDepto
From Departments
     where department_id = vDepartamento;
DBMS_output.put_line(vNomDepto||' '||vTotalEmpleados);
end Loop;
Close myCursor;

End

Declare
Cursor myCursor is Select department_id, count(*) as "total empleados"
from employees
where Department_id is not null
group by department_id
order by department_id;
vDepartamento employees.employee_id%type;
vTotalEmpleados integer;
Begin
 Open myCursor;
 Loop
     FETCH myCursor into vDepartamento, VTotalEmpleados;
Exit when myCursor%NOTFOUND;
DBMS_output.put_line(vDepartamento||' '||vTotalEmpleados);
end Loop;
Close myCursor;

End




declare
vNumDepto integer := 10;
vNomDepto varchar2(30);

Begin
Select Department_Name into vNomDepto
From Departments
where department_id = 10;
DBMS_output.put_line('El codigo del departamento es : '||vNumDepto);
DBMS_output.put_line('El codigo del departamento es : '||vNomDepto);
End

Clase de hoy: Resolvimos el problema de la clase pasada. [Parte 1]


Select department_id, count(*) as "total empleados"
from employees
group by department_id

desc departments

DEPARTMENT_NAME

Select DEPARTMENT_NAME as "Departamento", count(*) as "total empleados"
from employees, departments
group by DEPARTMENT_NAME

Select DEPARTMENT_NAME as "Departamento", count(*) as "total empleados"
from employees e, departments d
where e.department_id = d.department_id
group by DEPARTMENT_NAME


Select DEPARTMENT_NAME, count(Employee_id)
from employees e, departments d
where e.department_id = d.department_id
having count (Employee_id)>2
group by department_name
order by department_name


Select department_id, count(*) as "total empleados"
from employees
group by department_id
order by department_id

viernes, 1 de julio de 2011

Prueba Numero 3 Resuelta

* 1) Desarrolle los comandos necesarios para crear la vista vistaPromedioRentaPropiedad
que muestre para cada empleado el promedio de renta de las propiedades que administra: (15 Puntos) */

create or replace view vistaPromedioRentaPropiedad as
select numempleado, avg(renta) as "Renta Promedio"
from Propiedad
group by numempleado

/* 2) Indique el comando necesario para eliminar la vista
vistaPromedioRentaPropiedad creada en la pregunta anterior. (5 Puntos) */

drop view vistaPromedioRentaPropiedad;

/* 3) Indique la instrucción para eliminar la referencia a la tabla Oficina desde la tabla Empleado
(La foreign key FK_EMPLEADO_REFERENCE_OFICINA) (10 puntos) */

alter table Empleado
drop constraint FK_EMPLEADO_REFERENCE_OFICINA

/* 4) Escriba la sentencia para eliminar la tabla Empleado junto a sus llaves foráneas.(10 Puntos)*/

drop table empleado cascade constraint

/* 5) Indique el comando para actualizar la fecha de nacimiento (fechNac) del
empleado ‘SL21’ a '01/07/2011' (10 puntos) */

update empleado
set fechNac = '01/07/2011'
where numempleado = ‘SL21’

/* 6) Indique el comando necesario para listar todos los empleados nacidos
entre el año 1970 y 1980, ambas fechas inclusive. (10 puntos) */

select *
from Empleado
where to_char(FechNac, 'YYYY') between '1950' and '1960'
O
select *
from Empleado
where fechnac >= '01/01/1950' and fechnac <= '31/12/1960'

domingo, 12 de junio de 2011

Cuestionario SQL 2011

Realicen el siguiente cuestionario que hemos creado para ustedes. Con el fin de preparlos para el examen 


Cuestionario SQL 2011

Este cuestionario estará orientado a la preparación para el examen, y debe contener temas tales como:
  • Modelamiento de datos
  • Funciones agregadas en SQL
  • Herramientas CASE
  • Ciclo de Vida en el desarrollo de sistemas de bases de datos
  • Vistas en SQL
  • Operadores de Conjunto en SQL
  • Cualidades de la Información
  • Independencia entre datos y Aplicaciones
  • Sistemas de información
  • Que es un SGBD y sus caracteristicas
  • Consultas SQL
  • Comandos DDL / DML y SQL
  • etc.
Como mínimo deben diseñar 20 preguntas, de las cuales solamente 5 pueden ser de verdadero Falso).
deben publicar el su blog, el formulario y sus respuestas, Idealmente, que el usuario pueda obtener  el puntaje de respuestas correctas.
fecha de Entrega Viernes 17 de junio.

viernes, 10 de junio de 2011

Hacer las 10 preguntas para preguntar !! :D

Que es DLL DML

Lo de hoy ...

Select nombre, ciudad, calle
From Empleado e, Oficina o
Where ciudad = 'Valdivia'
And e.numOficina = o.NumOficina;


Select nombre, count(numempleado)
From Empleado
group by nombre
order by count(numempleado)desc


select distinct nombre
from empleado


select numoficina, calle
from oficina
where upper(calle) like '%MAIN STREET%';




GO!!

viernes, 20 de mayo de 2011

Recordatorio para las siguientes clases

Los Objetivos de 'Amigos y Cervezas'

1) Modelar

2) Crear Tablas

 CREATE TABLE  AMIGO
   (   
    IDAMIGO         NUMBER,
    NOMBRE             VARCHAR2(30),
    APELLIDO         VARCHAR2(30),
    TELEFONO         NUMBER,
    EMAIL             VARCHAR2(40),
    TWITTER         VARCHAR2(30),
    FECHANACIMIENTO DATE,
     CONSTRAINT AMIGO_PK PRIMARY KEY (IDAMIGO) ENABLE
   );

 CREATE TABLE  CERVEZA
   (   
    IDCERVEZA     NUMBER,
    NOMBRE         VARCHAR2(30),
    MARCA         VARCHAR2(20),
     CONSTRAINT CERVEZA_PK PRIMARY KEY (IDCERVEZA) ENABLE
   );


   CREATE TABLE  BAR
   (    IDBAR NUMBER,
    NOMBRE VARCHAR2(30),
    DIRECCION VARCHAR2(30),
    COMUNA VARCHAR2(20),
    TELEFONO NUMBER,
     CONSTRAINT BAR_PK PRIMARY KEY (IDBAR) ENABLE
   );


  
   CREATE TABLE  PRUEBA
   (   
    IDPRUEBA  NUMBER,
    IDAMIGO   NUMBER,
    IDCERVEZA NUMBER,
     CONSTRAINT PRUEBA_PK PRIMARY KEY (IDPRUEBA) ENABLE,
     CONSTRAINT PRUEBA_FK_AMIGO FOREIGN KEY (IDAMIGO)
      REFERENCES  AMIGO (IDAMIGO) ENABLE,
     CONSTRAINT PRUEBA_FK2_CERVEZA FOREIGN KEY (IDCERVEZA)
      REFERENCES  CERVEZA (IDCERVEZA) ENABLE
   );

   CREATE TABLE  SIRVE
   (    IDSIRVE NUMBER,
    IDCERVEZA NUMBER,
    IDBAR NUMBER, 

    GUSTA VARCHAR2(20),
     CONSTRAINT SIRVE_PK PRIMARY KEY (IDSIRVE) ENABLE, 
CONSTRAINT SIRVE_GUSTA CHECK ( GUSTA in ('NADA', 'NORMAL', 'MUCHO') ) ENABLE
     CONSTRAINT SIRVE_FK_CERVEZA FOREIGN KEY (IDCERVEZA)
      REFERENCES  CERVEZA (IDCERVEZA) ENABLE,
     CONSTRAINT SIRVE_FK_BAR FOREIGN KEY (IDBAR)
      REFERENCES  BAR (IDBAR) ENABLE
   );

   CREATE TABLE  FRECUENTA
   (    IDFRECUENTA NUMBER,
    IDAMIGO NUMBER,
    IDBAR NUMBER,
    HORARIO VARCHAR2(20),
     CONSTRAINT FRECUENTA_PK PRIMARY KEY (IDFRECUENTA) ENABLE,
     CONSTRAINT FRECUENTA_HORARIO CHECK ( HORARIO in ('MAÑANA', 'TARDE', 'NOCHE', 'INDIFERENTE') ) ENABLE,
     CONSTRAINT FRECUENTA_FK_AMIGO FOREIGN KEY (IDAMIGO)
      REFERENCES  AMIGO (IDAMIGO) ENABLE,
     CONSTRAINT FRECUENTA_FK_BAR FOREIGN KEY (IDBAR)
      REFERENCES  BAR (IDBAR) ENABLE
   );



3) Creacion de Llave primaria y Llave Foranea

   Alter table Amigo
   add constraint pk_Amigo Primary Key (idAmigo);

   Alter Table Prueba
   Add constraint fk_Prueba_Amigo
   foreign key (IdAmigo) references Amigo (idAmigo)
   Add constraint fk_Prueba_Cerveza
   foreign key (IdCerveza) references Cerveza (idCerveza);

                           ***TIPS***
   La tabla USER_TABLES tiene la lista de las tablas definidas en la cuenta+
    select Table_name from USER_TABLES
  
   El comando DESCRIBE permite conocer la estructura de la tabla
    Describe cerveza
  
   Alter table para MODIFICAR la estructura de la Tabla
    Alter Table Amigo
    modify email varchar2(35);
  
   Para modificar un atributa ya ingresado UPDATE


    set email = 'ppicapiedra@gmail.com'
    Update Amigo
    where idAmigo = 10;



       
   Para ver todas las tablas
 
    Select * from user_tables


4) Agregar registros a las tablas

  Begin
Insert into Amigo values (10, 'jesus', 'angel', 5554555, 'jesusangel@gmail.com','@jesus', '06/06/1966');
Insert into Amigo Values (20, 'ala', 'Wackeman', 932456765, 'rwackeman@hotmail.com', '@ala', '25/05/1960');
Insert into Amigo Values (30, 'jose', 'sito', 94286765, 'ianderson@hotmail.com', '@elmasactivao', '20/02/1950');
Insert into Amigo values (40, 'buda', 'Araya', 533542355, 'alan.alone@gmail.com','@alan', '06/06/1966');
Insert into Amigo Values (50, 'Cristo', 'manuel', 934275765, 'cris.death@hotmail.com', '@Cris', '25/05/1960');
Insert into Amigo Values (60, 'Marko', 'Smith', 942346765, 'markjon@hotmail.com', '@marko', '20/02/1950');

End

BEGIN
insert into Cerveza values (20, 'Duff', 'moes');
insert into Cerveza values (30, 'Bock', 'Kunstmann');
insert into Cerveza values (40, 'Cristal', 'CCU');
insert into Cerveza values (50, 'Baltica', 'CCU');
insert into Cerveza values (60, 'Heinecken', 'Heinecken');
insert into Cerveza values (70, 'Escudo', 'piraña rock');
END




Begin
Insert into Bar values (10, 'moes', 'independencia #6534', 'conchali', 7873434);
Insert into Bar Values (20, 'y tu mama?', 'dorsal #3245', 'quinta normal', 56434234);
Insert into Bar Values (30, 'revolution', 'cardenal caro #3242', 'vitacura', 4375235);
Insert into Bar values (40, 'pistolas y rosas', 'manuel Araya #6483', 'la florida',4763523);
Insert into Bar Values (50, 'Aguante!!', 'vivaceta #1313', 'independencia', 4343456);
Insert into Bar Values (60, 'tio bob', 'roma #1434', 'quilicura', 4563623);
End 



Begin
insert into prueba values (10, 10, 20);
insert into prueba values (11, 20, 30);
insert into prueba values (12, 30, 40);
insert into prueba values (13, 40, 50);
insert into prueba values (14, 50, 60);
insert into prueba values (15, 60, 70);
END









Begin
insert into sirve values (10,20,10,'NADA');
insert into sirve values (20,30,20,'NORMAL');
insert into sirve values (30,40,30,'NADA');
insert into sirve values (40,50,40,'MUCHO');
insert into sirve values (50,60,50,'MUCHO');
insert into sirve values (60,70,60.'NADA');

End     



Begin
insert into frecuenta values (10,10,10,'MAÑANA');
insert into frecuenta values (20,20,20,'TARDE');
insert into frecuenta values (30,30,30,'INDIFERENTE');
insert into frecuenta values (40,40,40,'NOCHE');
insert into frecuenta values (50,50,50,'TARDE');
insert into frecuenta values (60,60,60,'INDIFERENTE');

End



Select * from Cerveza
Select * from Amigo
Select * from Prueba

Select * from Prueba
Select * from Sirve
Select * from frecuenta

// buscar 2 cervezas diferentes

Select a.nombre
from Amigo a, Prueba p, Cerveza c
where a.idAmigo = p.idAmigo
  and p.idCerveza = c.idCerveza
  and (c.nombre = 'Cristal'
   or c.nombre = 'Escudo')

//buscar otra cerveza

Select a.nombre
from Amigo a, Prueba p, Cerveza c
where a.idAmigo = p.idAmigo
  and p.idCerveza = c.idCerveza
  and c.nombre = 'Cristal'
  and a.idAmigo in (Select idAmigo
                    from Prueba p, Cerveza c
                    where p.idCerveza = c.idCerveza
                    and c.nombre = 'Baltica') 

//otros codigos

create view amigosbar as
Select a.nombre,apellido,horario,b.nombre as "Nombre Bar"
from bar b, frecuenta f, Amigo a
where a.idAmigo = f.idAmigo
  and f.idBar = b.idBar
  and (b.nombre = 'moes')
select * from amigosbar



//buscar nombre del bar que sirve cerveza duff
Create view barcerveza as
Select c.nombre, gusta, b.nombre as "Nombre Bar"
from bar b, Sirve s, Cerveza c
where b.idBar = s.idBar
  and s.idCerveza = c.idCerveza
  and (b.nombre = 'moes')
select * from barcerveza