06 checks trigers

6
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ÁNDES “UNIANDES IBARRA” FACULTAD DE SISTEMAS MERCANTILES CARRERA DE SISTEMAS BASE DE DATOS II NIVEL: QUINTO SISTEMAS ESTUDIANTE: CHRISTIAN HERNAN SUÁREZ WILSON ALEXIS MARQUEZ DOCENTE: ING. RITA DÍAZ IBARRA 2014 – 2015

Upload: christian-suarez

Post on 15-Nov-2015

214 views

Category:

Documents


0 download

DESCRIPTION

Checks

TRANSCRIPT

UNIVERSIDAD REGIONAL AUTNOMADE LOS NDESUNIANDES IBARRAFACULTAD DE SISTEMAS MERCANTILESCARRERA DE SISTEMAS

BASE DE DATOS II

NIVEL: QUINTO SISTEMASESTUDIANTE:CHRISTIAN HERNAN SUREZWILSON ALEXIS MARQUEZDOCENTE: ING. RITA DAZIBARRA 2014 2015

TEMA: Base de datos transaccionalOBJETIVOS: Realizar consultas y transacciones en postgresql con checks y trigersFECHA: 04/11/2014

1. Las propiedades deben tener un valor > a 5000000 constraint propiedad_valor CHECK(valor>5000000);

2. El id de la propiedad debe ser > que el id de propietario constraint pr_ids CHECK(id_propiedad>id_propietario),

3. No se permite propiedades con la misma descripcin constraint pr_descrpcion UNIQUE(descripcion),

4. No se permite propiedades con 2 metros cuadrados con valores null

constraint pr_claves foreign key(idpropiedades) references propietarios(idpropie));

5. No se permite propietarios cuyo nombre sea Luis CONSTRAINT nombre CHECK (nombre 'luis'::text);

6. no se permite propietarios cuya edad < 18 y > 90 CONSTRAINT edad CHECK (edad < 18::numeric AND edad > 90::numeric);

7. apellidos propietarios se deben almacenar en mayuscula. CONSTRAINT mayus CHECK (apellido = upper(apellido))

8. Nombres propietarios se deben almacenar en minscula CONSTRAINT "minus" CHECK (nombre = lower(nombre))9. Salario de un secretario debe ser menor que el de un gerente CONSTRAINT salario CHECK (secretario_salario < gerente_salario);10. Realizar 2 ejercicios con trigers

Creamos una base de datos para utilizarla con nuestros ejemplos:

postgres@server:~$ psqlWelcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit

postgres=# CREATE DATABASE test001;CREATE DATABASE

postgres=# \c test001You are now connected to database "test001".

test001=# CREATE PROCEDURAL LANGUAGE plpgsql;Ahora creamos una tabla para poder definir nuestro primer disparador:CREATE TABLE numeros( numero bigint NOT NULL, cuadrado bigint, cubo bigint, raiz2 real, raiz3 real, PRIMARY KEY (numero));Despus tenemos que crear una funcin en PL/pgSQL para ser usada por nuestro disparador. Nuestra primera funcin es la ms simple que se puede definir y lo nico que har ser devolver el valor NULL:CREATE OR REPLACE FUNCTION proteger_datos() RETURNS TRIGGER AS $proteger_datos$ DECLARE BEGIN -- -- Esta funcion es usada para proteger datos en un tabla -- No se permitira el borrado de filas si la usamos -- en un disparador de tipo BEFORE / row-level --

RETURN NULL; END;$proteger_datos$ LANGUAGE plpgsql;A continuacin definimos en la tablanumerosun disparador del tipo BEFORE / row-level para la operacin DELETE. Ms adelante veremos como funciona:CREATE TRIGGER proteger_datos BEFORE DELETE ON numeros FOR EACH ROW EXECUTE PROCEDURE proteger_datos();La definicin de nuestra tabla ha quedado asi:test001=# \d numeros Table "public.numeros" Column | Type | Modifiers ----------+--------+----------- numero | bigint | not null cuadrado | bigint | cubo | bigint | raiz2 | real | raiz3 | real | Indexes: "numeros_pkey" PRIMARY KEY, btree (numero)Triggers: proteger_datos BEFORE DELETE ON numeros FOR EACH ROW EXECUTE PROCEDURE proteger_datos()

Creamos la tabla empleados.create table empleado( nom_emp text,sal_emp integer,\las_dat timestamp,las_use text);

Creamos la funcin para que no pueda insertar datos nulos en nombre ni salario y que se actualice la fecha automticamente con su respectivo usuario.

create or replace function emp() returns trigger as $emp$begin if new.nom_emp is null then raise exception 'no se inserto el nombre del empleado'; end if; if new.sal_emp is null then raise exception '%debe insertar un salario al empleado',new.sal_emp; end if;new.las_dat :=current_timestamp; new.las_use:=current_user;return new;end $emp$ language plpgsql;

Creamos un trigger con la funcin realizado anteriormente.

create trigger emp before insert or update on empleadofor each row execute procedure emp();

Realizamos una prueba de inserciones datos.

insert into empleado (nom_emp,sal_emp) values(suarez,121)

Actualizamos los datos.

update empleado setnom_emp=null,sal_emp=1000wherenom_emp ='christian'

CONCLUSIONES: Para realizar efectivamente condiciones o checks en postgreSQL es necesario realizar las mismas, con una sintaxis adecuada para evitar errores.RECOMENDACIONES: Se recomienda utilizar tanto el entorno grafico como el entorno de consola de postgreSQL para desarrollar condiciones.BIBLIOGRAFIA: Clases impartidas por la Ing. Rita Daz. Msc