You are on page 1of 4

------------------RECUPERACION COMPOSITE DATATYPE.

declare
TYPE emp_registro is RECORD
(employee_id number,
first_name varchar2(20),
last_name varchar2(20)
);

empleado emp_registro;

empleado employees%type;
begin
select employee_id, first_name, last_name
into empleado
from employees
where employee_id=110;

dbms_output.put_line('Nombre: ' ||empleado.first_name||' Apellido:'||


empleado.last_name);
end;
/
----------------------------
declare
TYPE EmpTabTyp IS TABLE OF employees%ROWTYPE
INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
begin
select *
into emp_tab(0)
from employees
where employee_id=100;
DBMS_OUTPUT.put_line('Nombre: ' ||emp_tab(0).FIRST_NAME);
DBMS_OUTPUT.put_line('Salario:' ||emp_tab(0).salary);
end;

------------------------ INSERT

alter table employees drop (creado_por, fecha_creacion );


desc employees
alter table employees add (creado_por varchar(20), fecha_creacion date);

drop sequence customers_seq;

CREATE SEQUENCE customers_seq


START WITH 3000
INCREMENT BY 1
NOCACHE
NOCYCLE;

select customers_seq.currval from dual


select customers_seq.nextval from dual

accept v_nombre_empleado prompt "Introduce el nombre del empleado: ";


accept v_email_empleado prompt "Introduce el email del empleado : ";
declare
TYPE EmpTabTyp IS TABLE OF employees%ROWTYPE INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
begin
/*
EMPLOYEE_ID NOT NULL NUMBER(6)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
*/
insert into employees (employee_id , last_name , email
, hire_date, job_id , creado_por, fecha_creacion)
values (customers_seq.nextval, '&v_nombre_empleado',
'&v_email_empleado', sysdate , 'PR_REP', user , current_date);
emp_tab(1).employee_id :=customers_seq.currval;
begin
select *
into emp_tab(1)
from employees
where employee_id = emp_tab(1).employee_id;
DBMS_OUTPUT.put_line('ID empleado: ' ||emp_tab(1).employee_id);
DBMS_OUTPUT.put_line('Nombre : ' ||emp_tab(1).LAST_NAME);
DBMS_OUTPUT.put_line('Email : ' ||emp_tab(1).email);
end;
end;

select * from employees where employee_id=3002


select to_char(fecha_creacion,'dd-mm-yy hh24:mi:ss') from employees where
employee_id=2009

COMMIT

---------------------------------------------- UPDATE
<<<<<<<<<<< CON HR >>>>>>>>>> la sequencia debe ser creada como GLOBAL.

CREATE SEQUENCE customers_seq --GLOBAL


START WITH 3000
INCREMENT BY 1
noCACHE
NOCYCLE;

select customers_seq.currval from dual


select customers_seq.nextval from dual

<<<<<<<<<CON SYSTEM -------------

<<<<<con HR>>>>>
alter table employees drop (modificado_por ,last_update );
alter table hr.employees add (modificado_por varchar(20), last_update date);

declare
TYPE EmpTabTyp IS TABLE OF HR.employees%ROWTYPE INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
v_last_name HR.employees.last_name%TYPE:= '&nombre';
v_email HR.employees.email%type := '&email';

begin
emp_tab(1).employee_id :=customers_seq.currval;
begin
select *
into emp_tab(1)
from HR.employees
where employee_id = emp_tab(1).employee_id;
DBMS_OUTPUT.put_line('ID empleado : ' ||emp_tab(1).employee_id);
DBMS_OUTPUT.put_line('Nombre : ' ||emp_tab(1).LAST_NAME);
DBMS_OUTPUT.put_line('Nuevo nombre: ' ||v_last_name);
DBMS_OUTPUT.put_line('Email : ' ||emp_tab(1).email);
DBMS_OUTPUT.put_line('Nuevo Email : ' ||v_email);
end;
update HR.employees
set last_name=v_last_name
,email= v_email
,modificado_por= user
,last_update =sysdate
where employee_id= emp_tab(1).employee_id;
end;

---------------------------------------------- DELETE
declare
v_employee_id employees.employee_id%type;
begin
v_employee_id :=customers_seq.currval;
delete from employees
where employee_id = v_employee_id;

DBMS_OUTPUT.put_line('ID empleado : ' ||v_employee_id);


DBMS_OUTPUT.put_line('Eliminado satisfactoriamente');
end;

-------------------------------------------- MERGE

drop table empleados


CREATE TABLE EMPLEADOS (ID NUMBER, NOMBRE VARCHAR2(20));
INSERT INTO EMPLEADOS VALUES(1,'ANDRES');
INSERT INTO EMPLEADOS VALUES(2,'PEDRO');
INSERT INTO EMPLEADOS VALUES(3,'MARIA');
COMMIT
select * from empleados

drop table copia_empleados


CREATE TABLE copia_empleados (ID NUMBER, NOMBRE VARCHAR2(20));
INSERT INTO copia_empleados VALUES(1,'A');
INSERT INTO copia_empleados VALUES(2,'P');

select * from copia_empleados


commit

begin
merge into copia_empleados co
using empleados em
on (em.id = co.id)
when matched then
Update set
co.nombre = em.nombre
when not matched then
insert values (em.id, em.nombre);
end;
select * from copia_empleados
-------------------------------------------------CURSOR IMPLICITO.
drop table empleados
CREATE TABLE EMPLEADOS (ID NUMBER, NOMBRE VARCHAR2(20));
INSERT INTO EMPLEADOS VALUES(1,'ANDRES');
INSERT INTO EMPLEADOS VALUES(2,'PEDRO');
INSERT INTO EMPLEADOS VALUES(3,'MARIA');

select * from empleados

declare
v_borrados number;
v_resultado char(10);
v_si_borro boolean;
begin
delete from empleados where id <3;
v_borrados := SQL%ROWCOUNT;
v_si_borro := SQL%FOUND;

v_resultado := CASE
WHEN v_si_borro THEN 'TRUE'
WHEN NOT v_si_borro THEN 'FALSE'
ELSE
'UNKNOWN'
END;
dbms_output.put_line ('Encontro Registros? :'|| v_resultado);

dbms_output.put_line('Renglones borrados:'||v_borrados);
END;

15986912

You might also like