viernes, 6 de enero de 2012

Minuta Miercoles 28/12 (Clase recuperativa Viernes 30/12)

Minuta Miercoles 28/12 (Clase recuperativa Viernes 30/12)
Autor: Daniel Berrios Aros
Proxima minuta: Octavio Moraga.
El miercoles 11
se tomara una prueba recuperativa para los que no realizaron la
catedra 1 o 2;
Funciones para el manejo de fechas ppt: Oracle 04
-------------------------------------------------
 Select To_Char(sysdate,'day') from dual;
        Muestra el dìa de semana (miercoles) en minuscula
 Select To_Char(sysdate,'DAY') from dual;
        Muestra el dìa de semana (MIERCOLES) en mayuscula
 Select Add_months(sysdate,1) from dual;
        Muestra la fecha actual sumandole una mes.
 Select to_char(Add_months(sysdate,1),'day') from dual;
        Muestra el dìa de la semana correspondiente a la fecha actual mas un
mes.
 Select last_day(to_date('01-02-2012','dd-mm-yyyy')) from dual;
        'dd/mm/yyyy' --> Para dar es seteo independiente de la configuraciòn
del servidor
        Ultimo dìa del mes (29,30,31) dìas
 Select months_between(sysdate,to_date('01-02-2011','dd-mm-yyyy'))
from dual;
        Diferencia de meses entre 2 fechas.
 Select next_day(sysdate,'Lunes') from dual;
        Muestra la fecha del proximo lunes.
Funciones que devuelven valores de caracteres
---------------------------------------------
 Select chr(64) from dual;
        Entrega el caracter @.
 Select concat('hola ','mundo') from dual;
        entrega hola mundo;
 Select 'hola'||'mundo' from dual;
        entrega holamundo ;
Revisar las sutilezas que existen en los ejemplos de la ppt:
Inicap, Lower, Upper, trim, ltrim, rtrim.
 Select Lpad('hola',20,'+') from dual;
        entrega:  ++++++++++++++++hola
 Select rpad('hola',20,'+') from dual;
        entrega:  hola++++++++++++++++
 Select replace('el profe es vacan','v','b') from dual;
        entrega:  el profe es bacan
 Select replace('el profe es vacan','v','bbbbbb') from dual;
        entrega:  el profe es bbbbbbacan
 select substr('el galeon español',4,6) from dual;
        entrega: galeon
 select instr('corporate floor','or',1,2) from dual;
        entrega : 5
 select translate('corporate floor','or','ro') from dual;
        entrega:  croproate flrro
 select ceil(3.52) from dual;
        entrega: 4 el entero proximo.
 select floor(3.52) from dual;
        entrega: 3 el entero anterior.
 Revisar las funciones:
        ABS,  Mod
 select mod(7,2) from dual;
        entrega 1, es impar.
 select nvl(trim('    '),0) from dual;
        Entrega valor 0 en caso de existir null.
 select power(2,5) from dual;
        Potencia entrega:  32.
 select round(2.27,1) from dual;
        entrega : 2.3
 select round(2.2,0) from dual;
        entrega : 0.
 select trunc(2.27212121,1) from dual;
        entrega 2.2
Funciones avanzadas
-------------------
Decode
-----------
del resultado de la consulta de empleados reemplazaremos si es M por
'Hombre', F por 'Mujer'
select sexo, decode(sexo,'F','Mujer','M','Hombre','Ambiguo') from
empleado;
update empleado set sexo='A' where numempleado='SL65';
Reemplazamos un registro de la tabla para mostrar un registro con el
valor ambiguo;
Case
-------
select salario, case
           when salario<100000 then 'Reguleque'
           when salario>300000 then 'Super bacan'
           else 'Esta bien' end
           from empleado;
Ejemplo como crear funcion:
create or replace function ParImpar (pNumero int)
        Return varchar2
        IS
        vTexto varchar2(5);
        Begin
                 If mod(pNumero,2)=0 Then
                         vTexto:='Par';
                 Else
                         vTexto:='ImPar';
                 end if;
                return vTexto;
        End ParImpar
Como ejecutarla:
        select ParImpar (5) from dual;
                retorna: Impar
        select ParImpar (2) from dual;
                retorna: Par

MINUTA 21/12/2011 DISEÑDA POR CRISTOBAL LANGER

fecha clases: 21 de Dic
autor: Cristóbal Langer F.
proxima minuta: Daniel Berrios
*** CLASE CURSORES ***
ESTRUCTURA DE UN CURSOR
declare
.....
.....
.....
select
  Begin
        OPEN micursor;
-- inicio del cursor
                LOOP;
                        Fetch micursor into v1,v2....vn
                        -- extrae un registro desde el cursor
                        exit when micursor%notfound
                        -- sale del cursor si no encuentra ningun registro en la posicion
que busca
                        DBMS_output_put_line (......)
                        -- imprime en pantalla
                ENDLOOP
        CLOSE
--cierre del cursor
   Expection
   en el momento que hay un error , lo captura, y tiene la
  End
  --Tarea de cursor
  pagina 28 y 29 de la powerpoint Oracle - 02 - PL-SQL
Actividad : Modifique el cursor aplicando paso de parámetros, y
publique en su blog.
RECORRER
--identifica las tablas que existe en esta cuenta
select distinct tablas.owner, tablas.table_name
    from all_tables tablas
    where tablas.owner = 'HR';
--identifica de cada tabla las columnas que tienes
select distinct col.column_name
    from all_tab_columns col
    where upper(col.owner) = 'HR'
    and lower(col.table_name) = 'employees';
***CODIGO CORREGIDO Marcos Gonzalo Vargas Salas***
DECLARE
         vPropietario          varchar2(40);
         vNombreTabla          varchar2(40);
     vNombreColumna    varchar2(100);
       /* Primer cursor */
       cursor obtieneTablas is
       select distinct t.owner, t.table_name
       from all_tables t
       where t.owner = '158196506';
       /* Segundo cursor */
       cursor obtieneColumnas is
       select distinct c.column_name
       from all_tab_columns c
       where c.owner = vPropietario
       and c.table_name = vNombreTabla;
               begin
  open obtieneTablas;
       dbms_output.put_line('Abriendo Cursor - obtieneTablas');
       loop fetch obtieneTablas into vPropietario, vNombreTabla;
           exit when obtieneTablas%NOTFOUND;
           dbms_output.put_line('Tabla : '||vPropietario||'.'||
vNombreTabla);
      open obtieneColumnas;
      loop fetch obtieneColumnas into vNombreColumna;
             exit when obtieneColumnas%NOTFOUND;
        dbms_output.put_line('=>'||vNombreTabla||'.'||
vNombreColumna);
      end loop;
      close obtieneColumnas;
  end loop;
       close obtieneTablas;
       EXCEPTION
       WHEN OTHERS THEN
       raise_application_error(-20001,'Se ha detectado un error - '||
SQLCODE||' -ERROR- '||SQLERRM);
end;
--Ejercicio en clases
        select *
        from all_tables
        select owner, table_name
        from all_tables
        where owner = '157375849'
        select owner from all_tab_columns
Ver power point subido
oracle 03 - variavles pl-sql
*** FUNCIONES ***
(recibe parametros y returna un resultado o valor)
ejemplo: select UPPER('hola') from DUAL
select user from dual;
--sysdate(fecha)
select to_char(sysdate,'day') from dual
--muestra el dia de la semana con mas caracteres
select '***'|| to_char(sysdate,'day') || '***' from dual
select to_char(to_date('03-09-1983','dd-mm-yyyy'),'day') from dual;
select to_char(to_date('03-09-1983','dd-mm-yyyy'),'DAY') from dual;
--buscar en google to_char
ingresar en el blog funciones que tengan que ver con fecha
en mejores practicas usar %type
EJERCICIO (genera 10 registros)
create table tx (x int,y varchar(5));
insert into tx
select rownum, trunc(dbms_random.value(1,99999))
from dual
connect by rownum <= 10;
select * from tx;
pregunta de prueba
funciones de conversion; TO_CHAR, TO_DAY, TO_NUMBER
--encontrar un caracter especial
select instr('hola mundo','o',1,2) from dual
--agrega un mes a la variable
select add_months (sysdate,1) from dual
*** Profesor se compromete a corregir la prueba porque se encontro
algunos errores en la corrección. ***
se recuerda que el proximo miercoles 28 se hara la clase
correspondiente al viernes 30 dic

viernes, 16 de diciembre de 2011

QUINTA CLASE FUNDAMENTOS DE ORACLE 16/12/2011

QUINTA CLASE FUNDAMENTOS DE ORACLE 10/12/2011
----------------------------------------------------------------------------------
INSERT

TABLA T1 (
A  INT
B  VARCHAR2(25)
);

INSERT INTO T1 VALUES
(1.'......')
INSERT INTO T1 (a)VALUES(1);   -- INSERTAR CUANDO NO CONSCO EL ATRIBUTO

----------------------------------------------------------------------------------
CONSTRAINT
INSERT
TABLA T1 (
A  INT PRIMARY KEY ,                    -- EVITA LLAVES DUPLICADAS ,
B  VARCHAR2(25)
);
----------------------------------------------------------------------------------
SELECT
----------------------------------------------------------------------------------
diferencia entre delete y drop
delete borra contenido , drop borra tabla completo
----------------------------------------------------------------------------------
listar las propiedades que arrienda un cliente
(nombre, apellido,numprop,finarriendo,arriendo)
Se debe utilizar join
select c.nombre, c.apellido,a.numpropiedad, a.sinarriendo
from   cliente c, arriendo a
where  c.numcliente=a.numcliente
and c.nombre='juan'
and c.apellido='perez'
UPPER(C.APELLIDO)='PEREZ'
----------------------------------------------------------------------------------
DDL/DML
LENGUAGE DE DEFINICION DE DATOS
---------------------------------------------------------------------------------
NULL VALOR ESPECIAL PARA ATRIBUTOS SIN CONTENIDO
---------------------------------------------------------------------------------
QUE INSTRUCCION SE DEBE HACER PARA MOSTRAR NUMEROS DE OFICINA VALDIVIA
SELECT NUMOFICINA
FROM OFICINA
WEHERE CIUDAD=''VALDIVIA';
--------------------------------------------------------------------------------
MUESTRE TODOS LOS EMPLEADOS QUE TRABAJAN EN VALDIVIA
SELECT NUMEMPLEADO, NOMBRE, APELLIDO
FROM EMPLEADO
WEHERE NUMOFICINA='B15'
O
WHERE NUMOFICINA IN (SELECT NUMOFICINA
FROM OFICINA WHERE CIUDAD='VALDIVIA' )
--------------------------------------------------------------------------------
TRIM QUITA LOS BLANCO DE TRAS Y DE ADELANTE
--------------------------------------------------------------------------------
CREATETE SEQUENCE SEWT1
START WITH 10
INCREMENT BY 10;
SELECT SEQT1.NETVAL FROM DUAL,
INSERT INTO T1 VALUES (SEQT1.NETVAL,'HOLA);
--------------------------------------------------------------------------------
SACAR PROMEDIO DE LOS EMPLEADOS QUE TRABAJAN EN LA MISMA OFICINA
SELECT  NOMBRE, APELLIDO,SALARIO, (SELECT AVG(SALARIO) FROM EMPLEADO)AS
PROMEDIO,SALARIO-(SELECT AVG(SALARIO) FROM EMPLEADO)
FROM EMPLEADO
--------------------------------------------------------------------------------
CON UN DECIMAL
SELECT  NOMBRE, APELLIDO,SALARIO,ROUND( (SELECT AVG(SALARIO) FROM EMPLEADO),1)AS
PROMEDIO,SALARIO-(SELECT AVG(SALARIO) FROM EMPLEADO)
FROM EMPLEADO
--------------------------------------------------------------------------------
NUMERO DE LA OFICINA , CUANTOS EMPLEADOS Y RENTA PROMEDIO
SELECT NUMOFICINA,COUNT(*),AVG(SALARIO),MAX(SALARIO),MIN(SALARIO)
FROM EMPLEADO
GROUP BY NUMOFICINA

--------------------------------------------------------------------------------
SELECT' ** '||TRIM ('') ||'**'FROM DUAL
ESTA TABLA PERMITE PROCESAR OPERACIONES QUE NO AFECTAN DATOS
-------------------------------------------------------------------------------
AGRUPAR EL CONCEPTO Y EL TOTAL
EJ TOTAL DE OFICINAS POR CIUDAD
------
REPASAR PARA PRIMERA CATEDRA
DELETE
DML/DDL
NULL
DROP
IN
DUAL
GROUP
DISTING
TRIM
CREATE  TABLE
CREATE  SEQUENCE
LIKE
WHERE
COUNT / MAX / MIN / AVG
ORDER BY
DESC
BETWEEN
UPPER/LOWER
---------------------------------------------------------------------------------

sábado, 10 de diciembre de 2011

CUARTA CLASE FUNDAMENTOS DE ORACLE 10/12/2011

Clase 4

1) Ejemplos
a) Listar todo el personal con un sueldo entre 200.000 y 300.000
SELECT *
FROM EMPLEADO
WHERE SALARIO >= 200000
AND SALARIO <= 100000;
SELECT *
FROM EMPLEADO
WHERE SALARIO BETWEEN 200000
AND 300000;

b) Listar los empleados con la ciudad de la oficina donde trabajan
SELECT E.EMPLEADO, NOMBRE, CIUDAD
FROM EMPLEADO E, OFICINA O
WHERE E.NUMOFICINA = O.NUMOFICINA;

c) Borrar los gerentes que ganen más de 100.000 pesos
SELECT *
FROM EMPLEADO
WHERE CARGO = 'Gerente'
AND SALARIO >= 100000;

d) Listar todo los clientes que tengan en su dirección la palabra "Glasgow"
SELECT *
FROM CLIENTE
WHERE DIRECCION LIKE '%GLASGOW%';

e) Listar todos los comentarios de las propiedades que han sido visitadas
SELECT * FROM VISITA
WHERE COMENTARIO IS NOT NULL;

2) Practicar los comandos
DELETE
IN
HAVING
ORDER BY
GROUP BY
BETWEEN
UPPER
LOWER
ROUND
VARCHAR2
NUMBER
INTEGER
BOOLEAN
LIKE

3) Instalación oracle express 11g + Oracle SQL Developer

Instrucciones para instalar Oracle Express 11g
Descargar:
Oracle Express 11g http://www.oracle.com/technetwork/database/express-edition/downloads/index.html
Oralce SQL Developer http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

Despues de instalar Oracle Express:
Para iniciar oracle express, ir a inicio, todos los programas, oracle database 11g express edition, entrar get started.
Oracle Sql Developer se ejecuta, y en los valores por defecto queda configurado para usarlo con oracle express.

4) Crear tabla en PL/SQL
CREATE TABLE T2(
e INTEGER,
f INTEGER
);
INSERT INTO T2 VALUES (1,3);
INSERT INTO T2 VALUES (2,4);

5) Asignación y cambio de variables (INTO asignación de variables)
DECLARE
a NUMBER;
b NUMBER;
BEGIN
SELECT e,f INTO a,b
FROM T2
WHERE e>1;   --ESTE SELECT ASIGNA EL ATRIBUTO E-->A Y F-->B DE TO0DOS AQUELLOS
REGISTROS CUYO ATRIBUTO E>1
INSERT INTO T2 VALUES (b,a);
END;
* Al ejecutar por segunda vez el procedimiento da un error porque hay una sutileza, funciona cuando el resultado
 entregue una sola tupla.

6) Mostrar en pantalla
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.PUT_LINE ('Hola mundo');
END;

7) Instrucción IF
DECLARE
PRECIO INTEGER :=18;
BEGIN
 IF PRECIO >= 15 THEN
       DBMS_OUTPUT.PUT_LINE ('El precio es: '||PRECIO);
 END IF;
END;
DECLARE
PRECIO INTEGER :=18;
TEXTO VARCHAR2(5);
BEGIN
 IF PRECIO >= 15 THEN
       TEXTO := 'MAYOR';
 ELSE
   TEXTO := 'MENOR';
 END IF;
 DBMS_OUTPUT.PUT_LINE ('El precio es'||TEXTO||'y es: '||PRECIO);
END;

8) Instrucción LOOP
DECLARE
I INTEGER;
BEGIN
I:=1;
LOOP
 DBMS_OUTPUT.PUT_LINE('Hola mundo: '||I);
 I:=I+1;
 EXIT WHEN I>10;
END LOOP;
END;

viernes, 9 de diciembre de 2011

TERCERA CLASE FUNDAMENTOS DE ORACLE 09/12/2011

-------------------------------------------------------------------
Para saver la fecha de hoy se debe digitar Select sysdate from dual
-------------------------------------------------------------------
Tabla Dual preghunta prueba
Todos los elementos que estan dentros de la BD son tablas
-------------------------------------------------------------------
crear tabla persona
id         integer primary key,
nombre     Varchar2 (35),                 ----------> significa que es variable
apellido   varchar2 (40),
fechanac   date,
renta      numeric (5,1)                  ----------> 4 enteros un decimal
-------------------------------------------------------------------
create table persona (
id        integer primary key,
nombre    Varchar2 (35),    
apellido   varchar2 (40),
fechanac     date,
renta     numeric (5,1)
);
-------------------------------------------------------------------
constraint pkpersona primary key (id); ------------------->es una restrinsion para que valor no se pueda repetir
OJO : Solo  puede tener una clave primaria
-------------------------------------------------------------------
Forma insertar un registro
insertar datos en tabla persona
insert into persona values (1,'Pedro','picapiedra','1-12-1960',200);
create sequence seqpersona;
-------------------------------------------------------------------
select * from tab----> sirve para ver las tablas creadas
select * from cat----> sirve para ver las tablas creadas
---------------------------o-------------------------------------------------
desc persona ------------------->muestra la estructura de la tabla person
------------------------------------------------------------------------------
http://umanitoba.ca/computing/ist/internal/admin_sys/project_review/media/Oracle_PLSQL_Quick_Reference_Card.pdf
Hoya de ayuda
--------------------------------

Trabajo Nª1: Buenas practicas para Oracle.

Descripción de las mejores practicas para Oracle PL/SQL.

Para ver el documento haz click aca


El grupo esta conformado por:

-Luisa Apaz
-Marisol Gutierrez
-Pedro Paredes
-Daniel Berrios

sábado, 3 de diciembre de 2011

SEGUNDA CLASE FUNDAMENTOS DE ORACLE 03/12/2011

TEMARIO

CREAR UNA TABLA

CREAR TIPOS DE ATRIBUTOS

PREGUNTAS DE PRUEBA

LLAVES PRIMARIAS Y FORANEAS

SEGUNDA FORMA DE CREAR TABLAS

REALIZAR TRABAJO DE INVESTIGACION (LAS MEJORES PRACTICAS DE MLSQL)

PUBLICAR EN BLOG DIRECCIONANDO LOS LINK DE WORD Y POWER POINT DESDE DROPBOX