Etiquetas

, ,


Teniendo en cuenta el post anterior, es obvio que podemos realizar acciones más importantes y muchos más utiles.

El siguiente ejemplo toma como base unas tablas llamadas ESTADO, AUTOMOVIL Y ALQUILER, donde se va a relacionar el alquiler con el estado de disponibilidad del automovil, por lo tanto, cada vez que hagamos un nuevo alquiler, se va a cambiar el estado del auto escogido a ALQUILADO como voy a demostrar abajo.

Primero las tablas que necesitamos son:

CREATE TABLE estado (
id_estado integer NOT NULL,
nombre character varying(16),
descripcion character varying(32)
);

CREATE TABLE automovil (
placas character varying(10) NOT NULL,
color character varying(16),
kilometraje character varying(16),
id_tabulador integer NOT NULL,
id_estado integer NOT NULL,
id_modelo integer NOT NULL,
id_marca integer NOT NULL
);

CREATE TABLE alquiler (
id_alquiler integer NOT NULL,
rfc character varying(13) NOT NULL,
placas character varying(10) NOT NULL,
rfcempresa character varying(16) NOT NULL,
folio integer NOT NULL
);

ALTER TABLE ONLY estado
ADD CONSTRAINT estado_pkey PRIMARY KEY (id_estado);

ALTER TABLE ONLY automovil
ADD CONSTRAINT automovil_pkey PRIMARY KEY (placas);

ALTER TABLE ONLY alquiler
ADD CONSTRAINT alquiler_pkey PRIMARY KEY (id_alquiler);

ALTER TABLE ONLY automovil
ADD CONSTRAINT automovil_id_estado_fkey FOREIGN KEY (id_estado) REFERENCES estado(id_estado);

Es un buen ejemplo, así que únicamente ejecuten las instrucciones anteriores y tendrán creados sus ejemplos para trabajar.

Lo primero que necesitamos crear es la funcion que va a actualizar el estado del automovil cuando se haya hecho un nuevo alquiler. Suponiendo que el estado es correspondiente con el numero 2 de su respectivo ID, bueno, la función quedaría así:

create or replace function p_ActualizaEstado () returns trigger as $$
BEGIN
IF (TG_OP = ‘INSERT’) THEN

update automovil
set id_estado = 2
where placas =  new.placas;

END IF;
RETURN NULL;
END
$$ LANGUAGE ‘plpgsql’

Si todo sale muy bien, ahora lo que falta es crear el Trigger correspondiente en la tabla alquiler que mande llamar la función.

CREATE TRIGGER actualiza_estado AFTER INSERT
ON alquiler FOR EACH ROW EXECUTE PROCEDURE p_actualizaestado();

Ahora podemos usar una interfaz como pgadmin ( yo uso phppgadmin) o también la consola para ingresar un nuevo valor en la tabla alquiler, así podremos ver como el estado del automovil cambia al ID_Estado=2 que corresponderá al estado ALQUILADO.

Anuncios