/* MANEJO DE FECHAS */
select sysdate from dual;
/* Ver como cambia de minuscula mayuscula */
select to_char(sysdate,'Day') from dual;
/* Agrega un mes al actual */
select ADD_MONTHs(sysdate,1) from dual;
/*Identificar en que dia TERMINA el mes */
select last_day(to_date('20/02/2012','dd/mm/yyyy')) from dual;
select months_between(sysdate,to_date('20/02/2012')) from dual;
/*Siguiente dia */
select next_day(sysdate,'lunes') from dual;
/*------------------------------*/
/* --> Pregunta de PRUEBA <--*/
/* Se puede contenar con: || y con CONCAT (cad1, cad2)= Devuelve "cad1" concatenada con "cad2".*/
/*------------------------------*/
/*Rellenar cadena*/
Select lpad('hola mundo',20,'+') from dual;
Select lpad('hola mundo',2,'+') from dual;
Select Rpad('hola mundo',20,'+') from dual;
Select Rpad('hola mundo',2,'+') from dual;
/*Reemplazo de caracteres */
select replace('kkkkkhhh','k','x') from dual;
/*Busca una cadena dentro de otra*/
select substr('toy cagao de sueño',5,5) from dual;
/*Transforma o cambia una caracter por otro*/
select translate('toy cagao de sueño','o','x') from dual;
/*obtiene el entero siguiente*/
Select ceil(3.7) from dual;
/*El resto de un numero*/
Select mod(10,2) from dual;
/*Validar el NULO de un numero*/
Select nvl(null,2) from dual;
Select nvl(trim(' '),1) from dual;
/*Potencia*/
Select power(2,4) from dual;
/*Redondea*/
Select round(2.5) from dual;
/*Acerca a la parte entera*/
Select trunc(2.5) from dual;
/*Funcion DECODE */
select * from empleado
select sexo, decode(sexo,'F','femenino','M','Macho') "Tipo de sexo" from empleado
/*Uso de CASE */
select salario,
case
when salario > 1000 then 0
else 1
end
from empleado
/*------------------------------------------------*/
/* FUNCIONES */
/*------------------------------------------------*/
/* Crear funciones */
/*CREATE [OR REPLACE] FUNCTION function_name.
[ (parameter [,parameter]) ].
RETURN return_datatype.IS |
AS. [declaration_section].
BEGIN. executable_section.
[EXCEPTION. exception_section].END [function_name];*/
CREATE or replace function Par_Impar(pnumero integer)
return varchar2
AS
vtexto varchar2(10);
BEGIN
if mod(pnumero,2)=0 then
vtexto:='Es par';
else
vtexto:='Impar';
end if;
Return vtexto;
END Par_Impar;
select salario, par_impar(salario) from empleado;
miércoles, 28 de diciembre de 2011
jueves, 22 de diciembre de 2011
Clase RECUPERATIVA - Miércoles 21 de Diciembre de 2011
Tablas all_tables y all_tab_columns
select distinct owner, table_name
from all_tables tablas
where owner = '141565168';
select distinct column_name
from all_tab_columns col
where upper(owner) = 'HR'
and lower(table_name) = '141565168';
select * from all_tables;
/********************************************************************************************/ tablas all_tables y all_tab_columns asociadas a un usuario select owner, table_name from all_tables where owner ='141565168'; select column_name, owner, table_name from all_tab_columns; /********************************************************************************************/ Realizar un cursor con catalogo del usuario 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;
/********************************************************************************************/ Funciones Usando dual select sysdate from dual; ¿Qué día de la semana nació usted? select to_char(to_date(‘09-SEP-1958','dd-mon-yyyy'),'day') from dual; select to_char(sysdate,'day') from dual; dia de nacimiento select to_char(to_date('14-01-1981','dd-mm-yyyy'),'day') from dual; /********************************************************************************************/ %TYPE create procedure update_emp (empid in number) is v_empid number; v_fname varchar2(20); v_lname varchar2(30); v_hire date; v_sal number; begin end; create procedure update_emp (empid in number) is v_empid employees.employee_id%type; v_fname employees.first_name%type; v_lname employees.last_name%type; v_hire employees.hire_date%type; v_sal employees.salary%type; begin end; begin select employee_id,first_name, last_name, hire_date, salary into v_empid, v_fname, v_lname, v_hire, v_sal from employees where employee_id = empid; end; create procedure update_emp (empid in number) is --declare TYPE emp_record_type IS RECORD (v_empid employees.employee_id%type; v_fname employees.first_name%type; v_lname employees.last_name%type; v_hire employees.hire_date%type; v_sal employees.salary%type; ); emp_record emp_record_type; begin ...
/********************************************************************************************/ Creando tablas para pruebas 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
TO_CHAR:
Transforma un tipo DATE ó NUMBER en una cadena de caracteres. Ejemplos:
to_char(45.31, '99.9') -> retorna '45.3'
to_char(9,125.33, '9,999.99') -> retorna '9,125.33'
to_char(77, '0099') -> retorna '0077'
TO_DATE:
Transforma un tipo NUMBER ó CHAR en DATE.
Ejemplo:
to_date('31/10/2007','DD/MM/YYYY‘) -> retorna ‘31/10/2007’
TO_NUMBER:
Transforma una cadena de caracteres en NUMBER. Ejemplo:
to_number('123') -> retorna 123
/********************************************************************************************/
Funciones que devuelven valores numéricos
ASCII(cad)= Devuelve el valor ASCII de la primera letra de la cadena "cad". Ejemplo:
ASCII('R') -> Retorna 82
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. Ejemplo:
INSTR('CORPORATE FLOOR','OR', 3, 2) ->El resultado obtenido es 14, busca la segunda ocurrencia de la cadena OR a partir de la tercer posición
LENGTH (cad)= Devuelve el numero de caracteres de cad. Ejemplo:
LENGTH(‘HOLA’) ->retorna 4
/********************************************************************************************/
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“, donde cad corresponde al día de la semana EJ: ‘sábado’
Clase RECUPERATIVA 2 - Sábado 17 de Diciembre de 2011
PL/SQL
Declare
i := 1;
Begin
Loop
dbms_output.putline ('Hola' || i );
i:= i+1
Exit when (i>5000)
EndLoop
/********************************************************************************************/
FOR
For i in ['Hola' || i );
Loop
dbms_output.putline ('Hola' || i );
EndLoop
FOR (REVERSE)
For i in reverse 1..5000
Loop
dbms_output.putline ('Hola' || i );
EndLoop
/********************************************************************************************/
WHILE
i := 1;
While ( i<5000)
Loop
dbms_output.putline ('Hola' || i );
EndLoop
/********************************************************************************************/
CURSOR (Consulta en memoria asignado a un nombre)
Declare
vnombre empleado.nombre%type
vsexo sexo.nombre%type
cursor ListaGeneroEmpleado is
vgenero varchar2 (10)
Select nombre, sexo FROM empleado;
Begin
Open ListaGeneroEmpleado ;
Loop
Fetch ListaGeneroEmpleado INTO vnombre, vsexo;
When ListaGeneroEmpleado %NOTFOUND;
IF vsexo := 'M' Then
vgenero := 'Hombre';
Else IF vsexo = 'F' Then
vgenero := 'mujer'
Else
vgenero := 'ambiguo'
EndIF
dbms_output.putline (VNOMBRE ||'', VSEXO ||'',vgenero );
EndLoop
Close ListaGeneroEmpleado;
/********************************************************************************************/
UPDATE
Update empleado
Set sexo = Upper(sexo);
Sube toda la letra en la tabla a MAYUSCULA
Clase 5 - Viernes 16 de Diciembre de 2011
Cátedra
7 preguntes de alternativa
2 de desarrollo (select
/********************************************************************************************/
INSERT
listar las propiedades que "arrienda" un cliente (nombre, apellido,numpro)(join)
SELECT c.nombre, c.apellido, a.numpropiedad, a.fechainicio
from cliente c, arriendo a
where c.numclinete = a.numcliente
AND c.nombre = 'Juan'
AND c.apellido = 'Perez'
INSERT con 3 tablas
SELECT c.nombre, c.apellido, a.numpropiedad, a.fechainicio
from cliente c, arriendo a, propiedad p, empleado e
where c.numclinete = a.numcliente
AND a.numpropiedad = p.numpropiedad
AND p.numempleado = e.numempleado
-----------------------------
ddl creando tabla
dml agregando registro
----------------------------
NULL es un valor especial para un atributo que nunca tuvo valor.
/********************************************************************************************/
Mejor manera para buscar
que usar AND y IN
SELECT
numempleado, nombre, apellido FROM EMPLEADO WHERE numoficina IN(SELECT numoficina FROM OFICINA WHERE ciudad = 'London')
/********************************************************************************************/
SELECT max(salario) from empleado where sexo = 'F'
/********************************************************************************************/
sábado, 10 de diciembre de 2011
Clase 4 - Sabado 10 de Diciembre de 2011
create table T1 (
e INTEGER,
F INTEGER
);
Begin
delete from T1;
insert into T1 values (1, 3);
insert into T1 values (2, 4);
end
select * from t1;
/* lo de arriba es SQL; debajo es el programa PL/SQL*/
DECLARE
a number;
b number;
BEGIN
select e,f into a,b /*Cursor implicito, acepta solo un registro*/
from T1
where e > 1; /* Este select asigna el atributo e->a y f ->b, de todos aquellos registros cuyo atributo e->1 */
insert into T1 values (b,a);
END;
/****************************************/
Set serveroutput on; /* habilita salida output */
/* habilitar en Toad, seleccionar pestaña DBMS Output, seleccionar Turn Output On (circulo rojo inferior izquierdo )*/
BEGIN
dbms_output.put_line('Hola mundo');
END;
/****************************************/
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('Es precio es ' || Texto || ' y es' || Precio);
END;
/****************************************/
/* Queda en un ciclo hasta que se cumpla la condicion */
DECLARE
i integer :=0;
BEGIN
LOOP
i:= i + 1;
dbms_output.put_line(i || '- Hola mundo');
exit when i =10;
END LOOP;
END;
e INTEGER,
F INTEGER
);
Begin
delete from T1;
insert into T1 values (1, 3);
insert into T1 values (2, 4);
end
select * from t1;
/* lo de arriba es SQL; debajo es el programa PL/SQL*/
DECLARE
a number;
b number;
BEGIN
select e,f into a,b /*Cursor implicito, acepta solo un registro*/
from T1
where e > 1; /* Este select asigna el atributo e->a y f ->b, de todos aquellos registros cuyo atributo e->1 */
insert into T1 values (b,a);
END;
/****************************************/
Set serveroutput on; /* habilita salida output */
/* habilitar en Toad, seleccionar pestaña DBMS Output, seleccionar Turn Output On (circulo rojo inferior izquierdo )*/
BEGIN
dbms_output.put_line('Hola mundo');
END;
/****************************************/
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('Es precio es ' || Texto || ' y es' || Precio);
END;
/****************************************/
/* Queda en un ciclo hasta que se cumpla la condicion */
DECLARE
i integer :=0;
BEGIN
LOOP
i:= i + 1;
dbms_output.put_line(i || '- Hola mundo');
exit when i =10;
END LOOP;
END;
Clase RECUPERATIVA 1 - Sabado 10 de Diciembre de 2011.
-- // Querys \\ --
Select *
From empleado
Where salario between 200000 and 300000
Select nombre, ciudad
From empleado e, oficina o
Where e.numoficina = o.numoficina
Select *
From Cliente
Where lower(direccion) like '%glasgon%'
Select *
From Cliente
Where lower(nombre) like 'mari_'
Select *
From empleado
Where salario between 200000 and 300000
Select nombre, ciudad
From empleado e, oficina o
Where e.numoficina = o.numoficina
Select *
From Cliente
Where lower(direccion) like '%glasgon%'
Select *
From Cliente
Where lower(nombre) like 'mari_'
viernes, 9 de diciembre de 2011
Clase 3 Viernes 9 de Diciembre de 2011.
-- // Funciones \\ --
Sysdate: Entrega fecha actual.
Ejemplo: Select sysdate From Dual
==============================================================
-- // Repaso creacion de tabla \\ --
Create table PERSONA
(Id_Persona int,
Nombre varchar2 (35),
Apellido varchar2 (35),
FechaNac Date,
Renta numeric(5,1),
constraint PK_Persona primary key (Id_Persona));
==============================================================
-- // Comando para ver las tablas creadas en la BD \\ --
Select * From Tab
Select * From Cat
-- // Comando para ver la descripcion de la tabla \\ --
Desc nombre_tabla
==============================================================
-- // Comando para crear un autoincremental \\ --
Create sequence sec_persona
Start with 1
Increment by 1;
Para insertar:
insert into persona values (sec_persona.NextVal,'Pedro','Picapiedra','1/12/1960',2222)
==============================================================
select round(renta/12) as sueldo, tipo, comentario
from visita v inner join propiedad p on v.numpropiedad = p.numpropiedad;
Select nombre, round(salario/12) as "salario mensual"
from Empleado
Select nombre, salario as "salario mensual"
from Empleado
Where salario >= 10000
Select *
From oficina
Where lower(ciudad) in ('santiago','arica')
Select *
From oficina
Where lower(ciudad) not in ('santiago','arica')
Select *
from Empleado
Where lower(cargo) not in ('gerente')
Sysdate: Entrega fecha actual.
Ejemplo: Select sysdate From Dual
==============================================================
-- // Repaso creacion de tabla \\ --
Create table PERSONA
(Id_Persona int,
Nombre varchar2 (35),
Apellido varchar2 (35),
FechaNac Date,
Renta numeric(5,1),
constraint PK_Persona primary key (Id_Persona));
==============================================================
-- // Comando para ver las tablas creadas en la BD \\ --
Select * From Tab
Select * From Cat
-- // Comando para ver la descripcion de la tabla \\ --
Desc nombre_tabla
==============================================================
-- // Comando para crear un autoincremental \\ --
Create sequence sec_persona
Start with 1
Increment by 1;
Para insertar:
insert into persona values (sec_persona.NextVal,'Pedro','Picapiedra','1/12/1960',2222)
==============================================================
select round(renta/12) as sueldo, tipo, comentario
from visita v inner join propiedad p on v.numpropiedad = p.numpropiedad;
Select nombre, round(salario/12) as "salario mensual"
from Empleado
Select nombre, salario as "salario mensual"
from Empleado
Where salario >= 10000
Select *
From oficina
Where lower(ciudad) in ('santiago','arica')
Select *
From oficina
Where lower(ciudad) not in ('santiago','arica')
Select *
from Empleado
Where lower(cargo) not in ('gerente')
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:
- Luis Aranda
- Oscar Maureira
- Jaime Pineda
sábado, 3 de diciembre de 2011
Clase 2. Sabado 3 de Diciembre del 2011.
Llaves primarias
Llaves foraneas.
Tabla Dual,
Creacion de tabla en SQL
create table empleado(
numEmpleado char(4),
apellido varchar2( "espacio que ocupa es variable hasta el numero que indica"
APELLIDO CHAR(30),
CARGO CHAR(35),
SEXO CHAR(1),
FECHNAC DATE,
SALARIO FLOAT,
NUMOFICINA CHAR(4),
constraint PK_EMPLEADO primary key (NUMEMPLEADO)
integer- entero
char-caracter
varchar- caracter largo variable
number-numerico
float -numerico con punto decimal
date- fecha
select from dual (tabla virtual permite hacer operaciones, practicar sin modificar tablas ya creadas)
creacion llave primaria
create table empleado(
numEmpleado char(4) Primary key
create table ARRIENDO (
NUMARRIENDO INTEGER not null,(para definir llave primaria)
NUMPROPIEDAD CHAR(4),
NUMCLIENTE CHAR(4),
RENTA FLOAT,
FORMAPAGO CHAR(10),
DEPOSITO FLOAT,
PAGADO CHAR(1),
INICIORENTA DATE,
FINRENTA DATE,
constraint PK_ARRIENDO primary key (NUMARRIENDO) ---> esta asignando llave primaria a NUMARRIENDO
);
Proximo sabado traer los mejores practicas de trabajos de investigacion de pl/sql
como se define llave primaria
1. Se agrega solo primery key al lado del campo
2. con un constraint.Ej: constraint PK_ARRIENDO primary key (NUMARRIENDO) ---> esta asignando llave primaria a NUMARRIENDO
);
3. ej:create table T1(
Id1 integer Primary key,
Nombre varchar2(25),
APELLIDO varchar2(30),
FECHNAC DATE
);
DDL: create table lenguaje de definicion de datos
DML: insert, delete lenguaje de manipulacion de datos
sysdate---> fecha del sistema que utiliza oracle
agregar registros a la tabla
insert into T1 values (1,'Diego','Aranda','17/06/2011');
Llaves foraneas.
Tabla Dual,
Creacion de tabla en SQL
create table empleado(
numEmpleado char(4),
apellido varchar2( "espacio que ocupa es variable hasta el numero que indica"
APELLIDO CHAR(30),
CARGO CHAR(35),
SEXO CHAR(1),
FECHNAC DATE,
SALARIO FLOAT,
NUMOFICINA CHAR(4),
constraint PK_EMPLEADO primary key (NUMEMPLEADO)
integer- entero
char-caracter
varchar- caracter largo variable
number-numerico
float -numerico con punto decimal
date- fecha
select from dual (tabla virtual permite hacer operaciones, practicar sin modificar tablas ya creadas)
creacion llave primaria
create table empleado(
numEmpleado char(4) Primary key
create table ARRIENDO (
NUMARRIENDO INTEGER not null,(para definir llave primaria)
NUMPROPIEDAD CHAR(4),
NUMCLIENTE CHAR(4),
RENTA FLOAT,
FORMAPAGO CHAR(10),
DEPOSITO FLOAT,
PAGADO CHAR(1),
INICIORENTA DATE,
FINRENTA DATE,
constraint PK_ARRIENDO primary key (NUMARRIENDO) ---> esta asignando llave primaria a NUMARRIENDO
);
Proximo sabado traer los mejores practicas de trabajos de investigacion de pl/sql
como se define llave primaria
1. Se agrega solo primery key al lado del campo
2. con un constraint.Ej: constraint PK_ARRIENDO primary key (NUMARRIENDO) ---> esta asignando llave primaria a NUMARRIENDO
);
3. ej:create table T1(
Id1 integer Primary key,
Nombre varchar2(25),
APELLIDO varchar2(30),
FECHNAC DATE
);
DDL: create table lenguaje de definicion de datos
DML: insert, delete lenguaje de manipulacion de datos
sysdate---> fecha del sistema que utiliza oracle
agregar registros a la tabla
insert into T1 values (1,'Diego','Aranda','17/06/2011');
viernes, 2 de diciembre de 2011
Clase 1, Viernes, 02 de Diciembre de 2011
Repaso de sentencias SQL
Ejemplos, SELECT:
select cargo, count(numempleado) as cantidad
from empleado
group by cargo
having count(*) >= 5
select cargo, count(numempleado) as cantidad from empleado group by cargo order by count(*) desc
select cargo, count(numempleado) as cantidad from empleado group by cargo order by cargo desc
select * from empleado where lower(sexo) = 'f'
select
cargo, count(numempleado) as cantidad from empleado group by cargo order by cargo desc
select
cargo, count(numempleado) as cantidad from
empleado
where
lower(sexo) = 'f' and lower(cargo) = 'asistente' group
by cargo
select
ciudad, count(*) as "Numero de oficinas"
from
oficina
group
by ciudad
Ejemplos, SELECT:
select cargo, count(numempleado) as cantidad
from empleado
group by cargo
having count(*) >= 5
select cargo, count(numempleado) as cantidad from empleado group by cargo order by count(*) desc
select cargo, count(numempleado) as cantidad from empleado group by cargo order by cargo desc
select * from empleado where lower(sexo) = 'f'
select
cargo, count(numempleado) as cantidad from empleado group by cargo order by cargo desc
select
cargo, count(numempleado) as cantidad from
empleado
where
lower(sexo) = 'f' and lower(cargo) = 'asistente' group
by cargo
select
ciudad, count(*) as "Numero de oficinas"
from
oficina
group
by ciudad
Suscribirse a:
Comentarios (Atom)