You are on page 1of 2

PRACTICA BSICA DE TRANSACCIONES

1. - Para entrar en la base de datos desde la consola

psql -U postgres -W -h localhost

2. - Crear base de datos

create DATABASE prueba;

3.- Conectar a la base de datos

\c prueba;

.4.- Crear tablas en la base de datos


create table Invoices (
invoice_id serial primary key,
invoice_number int not null,
invoice_date timestamp null default current_timestamp,
invoice_total money null default 0
);

create table InvoiceDetails (


invoiced_id serial primary key,
invoice_id int null references Invoices(invoice_id) on update cascade,
invoiced_description varchar(512) null,
invoiced_quantity smallint,
invoiced_amount money
);

5.- Listar las tablas


\d

6.- Comenzar la transaccin

begin;

insert into invoices(invoice_number,invoice_date,invoice_total)


values(20987,'02/02/2013',200);

insert into invoicedetails(invoice_id,invoiced_description,invoiced_quantity


,invoiced_amount)
values(currval('invoices_invoice_id_seq'),'Adapter 100 AC',2,100);

7.-Finalizar transaccion

END;

8. - En el segundo registro utilizamos el comando COMMIT de forma explicita para hacer los cambios
permanentes.
BEGIN

insert into invoices(invoice_number,invoice_date,invoice_total)


values(20988,'02/04/2013',666);

insert into
invoicedetails(invoice_id,invoiced_description,invoiced_quantity,invoiced_amount)
values(currval('invoices_invoice_id_seq'),'DVD for recording',6,111);

COMMIT;

9. - Ahora insertamos un nuevo registro y eliminamos un par pero en vez de confirmar la transaccin
con COMMIT deshacemos los cambios y regresamos los registros a su estado original, utilizando
ROLLBACK.

begin;
insert into invoices(invoice_number,invoice_date,invoice_total)
values(20999,'02/02/2013',209.97);

insert into
invoicedetails(invoice_id,invoiced_description,invoiced_quantity,invoiced_amount)
values(currval('invoices_invoice_id_seq'),'Answer calls',3,69.99);

Select count(invoice_id) from invoices;

Select count(invoice_id) from invoicedetails;

delete from invoicedetails where invoice_id in (3,4);

Select count(invoice_id) from invoicedetails;

rollback;

10. - En el siguiente bloque de PL/SQL annimo vamos a utilizar los comandos anteriores adems del
comando SAVEPOINT el cul permite deshacer parcialmente los cambios hechos dentro de una
transaccin y no toda la transaccin por completo.
Persistimos entonces solo los cambios antes del SAVEPOINT, los cambios realizados despus sern
revertidos por el comando ROLLBACK.
BEGIN

Select count(invoice_id) from invoicedetails;

SAVEPOINT Test_savepoint;

DELETE FROM invoicedetails;

Select count(invoice_id) from invoicedetails;

ROLLBACK to Test_savepoint;

Select count(invoice_id) from invoicedetails;

You might also like