eca : Evento, condicion, Accion
El Evento que dispara la regla especificada, en Oracle puede ser:
Una instrucción INSERT, UPDATE, DELETE
Una instrucción CREATE, ALTER o DROP
Un arranque de la BD o detención de la instancia
Un inicio o fin de sesión por parte del usuario
Un mensaje de Error
Un trigger es un procedimiento. (pero especial)
- a diferencia que no resibe un parametro
- se ejecuta solo
propbando un triger
---primero creamos 2 tablas t4 y t5
CREATE TABLE T4 (a INTEGER, b CHAR(10));
CREATE TABLE T5 (c CHAR(10), d INTEGER);
---Creamos el trigger
CREATE TRIGGER trig1
AFTER INSERT ON T4
REFERENCING NEW AS newRow
FOR EACH ROW
WHEN (newRow.a <= 10)
BEGIN
INSERT INTO T5 VALUES(:newRow.b, :newRow.a);
END trig1;
---luego agregamos valores a la tabla t4
insert into t4 values(7,'asd')
Ahora segun las condiciones del triger revisamos la tabla t5 y revisamos que se agregaron los mismos valores
clases...
miércoles, 11 de enero de 2012
viernes, 6 de enero de 2012
clase viernes 06 de enero del 2012
TRABAJAMOS CREANDO PROCEDIMIENTO Y FUNCIONES
para aquellos empleados que tengan mas de 5 propiedades se le agrega un bono segun el parametro.
pare eso creamos lo sig.
-- creamos el procedimiento
create or replace procedure bono2012 (pNumempleado in empleado.NUMEMPLEADO%type, pBono numeric:= 0.01)
is
-- declaramos las variables a ocupar
vSalario empleado.salario%type;
vTotprop numeric;
begin
select salario into vSalario --selecionamos el salario y lo guardamos en vsalrio
from empleado
where numempleado = pNumempleado;
select count(*) into vTotprop -- contamos las propiedades de los empleados y lo guardamos en vTotprop
from propiedad
where numempleado = pNumempleado;
if vTotprop >= 5 then -- vemos si vtotpro es mayor o igual a 5
update empleado
set salario = salario + salario*pBono
where numempleado =pNumempleado; --- aca terminamos de actualizar los valores de los empleados segun el bono
dbms_output.put_line ('empleado'||pnumempleado||'bono'||pBono||'aumento'||vSalario*pBono); -- imprimimos el resultado
else
dbms_output.put_line ('empleado'||pNumempleado||'no aplico bono'); -- imprimimos si no hay resultados
end if;
end bono2012; -- cerramos procedimiento
APLICAMOS BONO A EMPLEADO SL21
begin
bono2012('SL21',pBono => 0.05);
end;
CREAMOS FUNCION CUENTA PROPIEDADES
create or replace function cuentapropiedades (pNumepleado empleado.numempleado%type)
return number
is
vTotprop numeric; -- declaramos variable VTotprop
begin
select count(*) into vTotprop
from propiedad
where numepleado = pNumempleado;
return vTotprop;
exception
when no_data_found then
return 0;
when others then
return 0;
end
LLAMAMOS A LA FUNCION
SELECT cuantapropiedades('SL21') FROM dual
--- CREAMOS FUNCION DONDE AL INGRESAR UN NUMERO ENTREGA LA SUMA DE LOS RESTOS
create or replace function sumadijito(pNumero in number)
return number
is
num_aux number;
suma number;
begin
num_aux :=pNumero;
suma := 0;
while num_aux > 0 loop
suma :=suma + mod(num_aux,10);
num_aux := trunc (num_aux/10);
end loop;
return suma;
end;
LLAMAMOS A LA FUNCION
select sumadijito(125) from dual -- ingresamos el numero 125 entregando como resultado 8
para aquellos empleados que tengan mas de 5 propiedades se le agrega un bono segun el parametro.
pare eso creamos lo sig.
-- creamos el procedimiento
create or replace procedure bono2012 (pNumempleado in empleado.NUMEMPLEADO%type, pBono numeric:= 0.01)
is
-- declaramos las variables a ocupar
vSalario empleado.salario%type;
vTotprop numeric;
begin
select salario into vSalario --selecionamos el salario y lo guardamos en vsalrio
from empleado
where numempleado = pNumempleado;
select count(*) into vTotprop -- contamos las propiedades de los empleados y lo guardamos en vTotprop
from propiedad
where numempleado = pNumempleado;
if vTotprop >= 5 then -- vemos si vtotpro es mayor o igual a 5
update empleado
set salario = salario + salario*pBono
where numempleado =pNumempleado; --- aca terminamos de actualizar los valores de los empleados segun el bono
dbms_output.put_line ('empleado'||pnumempleado||'bono'||pBono||'aumento'||vSalario*pBono); -- imprimimos el resultado
else
dbms_output.put_line ('empleado'||pNumempleado||'no aplico bono'); -- imprimimos si no hay resultados
end if;
end bono2012; -- cerramos procedimiento
APLICAMOS BONO A EMPLEADO SL21
begin
bono2012('SL21',pBono => 0.05);
end;
CREAMOS FUNCION CUENTA PROPIEDADES
create or replace function cuentapropiedades (pNumepleado empleado.numempleado%type)
return number
is
vTotprop numeric; -- declaramos variable VTotprop
begin
select count(*) into vTotprop
from propiedad
where numepleado = pNumempleado;
return vTotprop;
exception
when no_data_found then
return 0;
when others then
return 0;
end
LLAMAMOS A LA FUNCION
SELECT cuantapropiedades('SL21') FROM dual
--- CREAMOS FUNCION DONDE AL INGRESAR UN NUMERO ENTREGA LA SUMA DE LOS RESTOS
create or replace function sumadijito(pNumero in number)
return number
is
num_aux number;
suma number;
begin
num_aux :=pNumero;
suma := 0;
while num_aux > 0 loop
suma :=suma + mod(num_aux,10);
num_aux := trunc (num_aux/10);
end loop;
return suma;
end;
LLAMAMOS A LA FUNCION
select sumadijito(125) from dual -- ingresamos el numero 125 entregando como resultado 8
procedimiento 2 parametros entradas pbono y empleado
create or replace procedure bono2012 (pnumempleado IN empleado.NUMEMPLEADO%type, pbono numeric:= 0.01)
is
vsalario empleado.salario%type;
vtotprop numeric;
begin
select salario into vsalario
from empleado
where numempleado = pnumempleado;
select count (*) into vtotprop
from propiedad
where numempleado = pnumempleado;
if vtotprop >= 5 then
update empleado
set salario = salario + salario * pbono
where numempleado = pnumempleado;
dbms_output.put_line ('empleado '|| pnumempleado || 'bono' || pbono || 'aumento' || vsalario * pbono);
else
dbms_output.put_line ('empleado' || pnumempleado || 'no aplico bono');
end if;
end;
is
vsalario empleado.salario%type;
vtotprop numeric;
begin
select salario into vsalario
from empleado
where numempleado = pnumempleado;
select count (*) into vtotprop
from propiedad
where numempleado = pnumempleado;
if vtotprop >= 5 then
update empleado
set salario = salario + salario * pbono
where numempleado = pnumempleado;
dbms_output.put_line ('empleado '|| pnumempleado || 'bono' || pbono || 'aumento' || vsalario * pbono);
else
dbms_output.put_line ('empleado' || pnumempleado || 'no aplico bono');
end if;
end;
miércoles, 28 de diciembre de 2011
28/12/2011 clase
DIAPOSITIVA 16 DE CLASE 4
---->Entrega fecha actual
select sysdate from dual
----> Agregar un mes a la fecha actual
select add_months (sysdate,1) from dual
----> Muestra dia actual
select to_char (sysdate, 'DAY') from dual
----> Saber que dia de la semana sera en un mes mas
select to_char (add_months (sysdate,1), 'day') from dual
----> Saber si el año 2012 el mes de feberero tiene 29 dias ocupando comando last_day
select to_char (last_day (to_date('01-02-2012','dd-mm-yyyy'))) from dual
---->diferencia de fechas en meses(tiempo)
select months_between (sysdate, (to_date('01-10-2012','dd-mm-yyyy'))) from dual
----> fecha del proximo dia por ejemplo el lunes
select next_day (sysdate,'Lunes') from dual
----> caracter de un numero (accii)
select chr(64) from dual
concatenando mensaje con pait
select ('Hola'||' '||'Mundo') from dual
INITCAP = conbierte la primera letra en mayuscula
---> comando lpad, rellenando con signos mas hasta 20 caracteres por el lado izquierdo
select lpad('hola',20,'+') from dual
---> comando rpad, rellenando con signos mas hasta 20 caracteres por el lado derecho
select rpad('hola',20,'+') from dual
-*---> reemplaza una lñetra del string
select replace ('hola mundo denuevo','v','b') from dual
--->substr , saca dentro de un caracter
select substr('el galeon español',4,6) from dual
----> translate reeemplaza un valor (en el ejemplo reemplaxza el * por la donde encuentra or en la frase)
select translate('corporate floor','or','**') from dual
---->ceil = entero proximo de un numero
select ceil(3.48) from dual
----> floor = entrega el numero entero anterios
select floor(3.48) from dual
----> power = potencia entre 2 numeros
select power(2,5) from dual
--->round = redeondea un valo
select round(2,99,9) from dual
---->Trunca números para que tengan una cierta cantidad de dígitos de precisión
select trunc(2,99.9) from dual
comando decode (en sexo que decia f lo dejamos en mujer)
select sexo, decode (sexo,'F','Mujer','M','Hombre', 'Ambiguo') from empleado
---> CAMBIAMOS EL SEXO A UNJ EMPLEADO CONUN UPDATE
update empleado
set sexo ='A'
where numempleado = 'SL65'
---> comando case dimos explesiona un sueldo segun su valor
select salario, case
when salario <100000 then 'reguleque' when salario >300000 then 'super sueldo'
else 'ta correcto'
end
from empleado
---> creamos funcion parimpar
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;
----> provamos la anterios funcion
select parimpar (2) from dual
---->Entrega fecha actual
select sysdate from dual
----> Agregar un mes a la fecha actual
select add_months (sysdate,1) from dual
----> Muestra dia actual
select to_char (sysdate, 'DAY') from dual
----> Saber que dia de la semana sera en un mes mas
select to_char (add_months (sysdate,1), 'day') from dual
----> Saber si el año 2012 el mes de feberero tiene 29 dias ocupando comando last_day
select to_char (last_day (to_date('01-02-2012','dd-mm-yyyy'))) from dual
---->diferencia de fechas en meses(tiempo)
select months_between (sysdate, (to_date('01-10-2012','dd-mm-yyyy'))) from dual
----> fecha del proximo dia por ejemplo el lunes
select next_day (sysdate,'Lunes') from dual
----> caracter de un numero (accii)
select chr(64) from dual
concatenando mensaje con pait
select ('Hola'||' '||'Mundo') from dual
INITCAP = conbierte la primera letra en mayuscula
---> comando lpad, rellenando con signos mas hasta 20 caracteres por el lado izquierdo
select lpad('hola',20,'+') from dual
---> comando rpad, rellenando con signos mas hasta 20 caracteres por el lado derecho
select rpad('hola',20,'+') from dual
-*---> reemplaza una lñetra del string
select replace ('hola mundo denuevo','v','b') from dual
--->substr , saca dentro de un caracter
select substr('el galeon español',4,6) from dual
----> translate reeemplaza un valor (en el ejemplo reemplaxza el * por la donde encuentra or en la frase)
select translate('corporate floor','or','**') from dual
---->ceil = entero proximo de un numero
select ceil(3.48) from dual
----> floor = entrega el numero entero anterios
select floor(3.48) from dual
----> power = potencia entre 2 numeros
select power(2,5) from dual
--->round = redeondea un valo
select round(2,99,9) from dual
---->Trunca números para que tengan una cierta cantidad de dígitos de precisión
select trunc(2,99.9) from dual
comando decode (en sexo que decia f lo dejamos en mujer)
select sexo, decode (sexo,'F','Mujer','M','Hombre', 'Ambiguo') from empleado
---> CAMBIAMOS EL SEXO A UNJ EMPLEADO CONUN UPDATE
update empleado
set sexo ='A'
where numempleado = 'SL65'
---> comando case dimos explesiona un sueldo segun su valor
select salario, case
when salario <100000 then 'reguleque' when salario >300000 then 'super sueldo'
else 'ta correcto'
end
from empleado
---> creamos funcion parimpar
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;
----> provamos la anterios funcion
select parimpar (2) from dual
clase 28/12/11 por bady
select sysdate from dual;--
/*
suma un mes
*/select
-- verifica si es bicierto
select
-- muestra entre fechas
select
-- saber que dia es el proximo dia
select
-- muestar asscii
select
-- concat es penxca mejor el ||
select
-- llena por derecha e izquierda
select
select lpad ('hola',30,'p') from dual; rpad ('hola',30,'p') from dual;-- remplaza
select replace ('el profe es vacan', 'v', 'b') from dual;-- busca el cuarto espacio del largo seis
select substr ('el galeon español',4,6) from dual;-- corporate floor
select
select
select
select
select nvl(null,0) from dual;select nvl(trim,('')0) from dual; -- mala select power (2,5) from dual; select round (2.27,1) from dual; --redondea numeroselect trunc (2.27,1) from dual --corta el numerooselect
select numempleado,sexo, decode(sexo,'F','Mujer','M','Hombre','ambiguo') from empleado;update empleadoset sexo = 'A'where numempleado = 'SL65';select salario, casewhen salario < 100000 then 'reguleke'when salario > 300000 then 'super bkn'
else 'ta bien' end
create or replace FUNCTION parimpar (pnumero int )RETURN varchar2
vtext is varchar2 (5);
begin
vtext if mod(pnumero,2)==0 then = 'par';elsevtext = 'impar';end if
return vtext;
-- de esta forma se llama a la funcion par impar poniendole un parametro -- las funciones se crean con rallito arriba y se corre
select parimpar(5) from dual
end parimpar from empleado * from empleado; mod(7,2) from dual; -- devuelve el resto de la divisuioon floor (3.52) from dual; --redonde hacia abajo ceil (3.52) from dual; -- redondea hacia arriba translate ('corporate floor','or','tt') from dual; 'hola'||'mundo' from dual; chr(64) from dual; next_day (sysdate, 'Lunes') from dual; MONTHS_BETWEEN (sysdate,(to_date('01-02-2012', 'dd-mm-yyyy'))) from dual; to_char(last_day(to_date('01-02-2012', 'dd-mm-yyyy'))) from dual; add_months (sysdate,1) from dual;
/*
suma un mes
*/select
-- verifica si es bicierto
select
-- muestra entre fechas
select
-- saber que dia es el proximo dia
select
-- muestar asscii
select
-- concat es penxca mejor el ||
select
-- llena por derecha e izquierda
select
select lpad ('hola',30,'p') from dual; rpad ('hola',30,'p') from dual;-- remplaza
select replace ('el profe es vacan', 'v', 'b') from dual;-- busca el cuarto espacio del largo seis
select substr ('el galeon español',4,6) from dual;-- corporate floor
select
select
select
select
select nvl(null,0) from dual;select nvl(trim,('')0) from dual; -- mala select power (2,5) from dual; select round (2.27,1) from dual; --redondea numeroselect trunc (2.27,1) from dual --corta el numerooselect
select numempleado,sexo, decode(sexo,'F','Mujer','M','Hombre','ambiguo') from empleado;update empleadoset sexo = 'A'where numempleado = 'SL65';select salario, casewhen salario < 100000 then 'reguleke'when salario > 300000 then 'super bkn'
else 'ta bien' end
create or replace FUNCTION parimpar (pnumero int )RETURN varchar2
vtext is varchar2 (5);
begin
vtext if mod(pnumero,2)==0 then = 'par';elsevtext = 'impar';end if
return vtext;
-- de esta forma se llama a la funcion par impar poniendole un parametro -- las funciones se crean con rallito arriba y se corre
select parimpar(5) from dual
end parimpar from empleado * from empleado; mod(7,2) from dual; -- devuelve el resto de la divisuioon floor (3.52) from dual; --redonde hacia abajo ceil (3.52) from dual; -- redondea hacia arriba translate ('corporate floor','or','tt') from dual; 'hola'||'mundo' from dual; chr(64) from dual; next_day (sysdate, 'Lunes') from dual; MONTHS_BETWEEN (sysdate,(to_date('01-02-2012', 'dd-mm-yyyy'))) from dual; to_char(last_day(to_date('01-02-2012', 'dd-mm-yyyy'))) from dual; add_months (sysdate,1) from dual;
miércoles, 21 de diciembre de 2011
clases 21/12/2011
seleccionamos todas las tablas
pero en especial la con nuestro nombre (160311290)
select owner, table_name
from all_tables
where owner = '160311290'
funciones to_date y to_char
aplicamos para obtener el dia en que nacimos
select to_char (to_date('27-04-1985','dd-mm-yyyy' ), 'day') from dual
REPASAR %TIPE
USASNDO RECORD
SELECT a,b into vr
type mitiporecord is record
va varchar2(2)
vb int
);
vr mitiporecord
creamos tabla y obtenemos valores al azar
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;
select instr ('hola mundo','o',1,2) from dual
descontamos un mes a la fecha actual
select to_char (add_months (sysdate, -1), 'day') from dual
pero en especial la con nuestro nombre (160311290)
select owner, table_name
from all_tables
where owner = '160311290'
funciones to_date y to_char
aplicamos para obtener el dia en que nacimos
select to_char (to_date('27-04-1985','dd-mm-yyyy' ), 'day') from dual
REPASAR %TIPE
USASNDO RECORD
SELECT a,b into vr
type mitiporecord is record
va varchar2(2)
vb int
);
vr mitiporecord
creamos tabla y obtenemos valores al azar
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;
select instr ('hola mundo','o',1,2) from dual
descontamos un mes a la fecha actual
select to_char (add_months (sysdate, -1), 'day') from dual
viernes, 16 de diciembre de 2011
Clase repaso para prueba 16.12.1011
el comando DELETE borra contenido
y el comando DROP borra todo
--listar las propiedades que tiene(arrienda) un cliente
(nombre, apellido, numprop, finicio(arriendo))
SELECT C.nombre, C.apellido, A.numpropietario, Afinicio
FROM cliente C, arriendo A
WHERE C.numcliente = A.numcliente
AND C.nombre = 'Juan'
AND C.apellido = 'Perez'
* aca arriba seleccionamos un dato de 2 tablas
----selecionamos numeros de oficinas de valdivia
select numOficina
from oficina
where ciudad = 'valdivia'
-----selecionamos empleados que trabajen en la oficna de valvidia
select numEmpleado, nombre, apellido
from empleado
where numOficina in (select numOficina
from oficina
where ciudad = 'Valdivia')
----salario maximo de las mujeres
select max(salario)
from empleado
where sexo = 'F'
comando TRIM quita los espacios en blanco
-----crear secuencia en tabla t1
create sequence seqt1
start with 10
increment by 10
select seqt1.nextval from dual
insert into t1 values (seqt1.nextval,'22')
----salario promedio de los empleados
select nombre, apellido, salario, (select avg(salario) from empleado) as promedio, salario - (select avg(salario) from empleado) as diferencia)
---agrupar por numero de oficina empleado reanta promedio max y min de empleados.
select numOficina, count(*), avg(salario) as promedio, max(salario) as salario_maximo, min(salario) as salario_minimo
from empleado
group by numOficina
----listar oficina con promedio de salario mas alto
select numOficina, avg(salario)
group by numOficina
having avg(salario) = (select max(salario))
from empleado
group by numoficina
---listar las ciudades que tengan mas de 2 oficinas
select ciudad, count(numoficina) as cantidad_de_oficinas
from Oficina
group by ciudad
having count(numoficina)>2
y el comando DROP borra todo
--listar las propiedades que tiene(arrienda) un cliente
(nombre, apellido, numprop, finicio(arriendo))
SELECT C.nombre, C.apellido, A.numpropietario, Afinicio
FROM cliente C, arriendo A
WHERE C.numcliente = A.numcliente
AND C.nombre = 'Juan'
AND C.apellido = 'Perez'
* aca arriba seleccionamos un dato de 2 tablas
----selecionamos numeros de oficinas de valdivia
select numOficina
from oficina
where ciudad = 'valdivia'
-----selecionamos empleados que trabajen en la oficna de valvidia
select numEmpleado, nombre, apellido
from empleado
where numOficina in (select numOficina
from oficina
where ciudad = 'Valdivia')
----salario maximo de las mujeres
select max(salario)
from empleado
where sexo = 'F'
comando TRIM quita los espacios en blanco
-----crear secuencia en tabla t1
create sequence seqt1
start with 10
increment by 10
select seqt1.nextval from dual
insert into t1 values (seqt1.nextval,'22')
----salario promedio de los empleados
select nombre, apellido, salario, (select avg(salario) from empleado) as promedio, salario - (select avg(salario) from empleado) as diferencia)
---agrupar por numero de oficina empleado reanta promedio max y min de empleados.
select numOficina, count(*), avg(salario) as promedio, max(salario) as salario_maximo, min(salario) as salario_minimo
from empleado
group by numOficina
----listar oficina con promedio de salario mas alto
select numOficina, avg(salario)
group by numOficina
having avg(salario) = (select max(salario))
from empleado
group by numoficina
---listar las ciudades que tengan mas de 2 oficinas
select ciudad, count(numoficina) as cantidad_de_oficinas
from Oficina
group by ciudad
having count(numoficina)>2
Suscribirse a:
Entradas (Atom)