Sunteți pe pagina 1din 5

UNIVERSIDAD REGIONAL AUTNOMA

DE LOS NDES
UNIANDES IBARRA
FACULTAD DE SISTEMAS
MERCANTILES
CARRERA DE SISTEMAS

BASE DE DATOS II
NIVEL: QUINTO SISTEMAS
ESTUDIANTE:
CHRISTIAN HERNAN SUREZ
WILSON ALEXIS MARQUEZ
DOCENTE:

ING. RITA DAZ

IBARRA
2014 2015

TEMA: Base de datos transaccional


OBJETIVOS: Realizar consultas y transacciones en postgresql con checks y
trigers
FECHA: 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:~$ psql
Welcome 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 test001

You 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 tabla numeros un disparador del tipo BEFORE / rowlevel 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 empleado
for 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 set
nom_emp=null,
sal_emp=1000
where

nom_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

S-ar putea să vă placă și