Laboratorio 7 Profesora: Andrea Rodrı́guez Ayudante: Daniel Campos Bases de Datos I Universidad de Concepción 8 de noviembre de 2013 Introducción a SQL - FUNCTIONS CREATE OR REPLACE FUNCTION name (param, ...) RETURN tipo_retorno AS $$ DECLARE variable1; variable2; BEGIN sentencia; sentencia; RETURN retorno; END; $$ LANGUAGE 'plpgsql' Introducción a SQL - FUNCTIONS - Ejemplo CREATE FUNCTION add(integer, integer) RETURNS integer AS 'select $1 + $2' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT Introducción a SQL - FUNCTIONS - Ejemplo CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$ BEGIN RETURN i + 1; END; $$ LANGUAGE plpgsql; Introduccion a SQL - FUNCTIONS - Ejemplo CREATE FUNCTION dup(int) RETURNS TABLE(f1 int, f2 text) AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$ LANGUAGE SQL; Introducción a SQL - CREATE TRIGGER Los triggers son funciones que se ejecutan de forma automática en respuesta a ciertos eventos (insert, update, delete). CREATE OR REPLACE FUNCTION nombre_function(param, ...) RETURNS trigger AS $$ DECLARE variable1; variable2; BEGIN sentencia; sentencia; RETURN retorno; END; $$ LANGUAGE 'plpgsql'; Introducción a SQL - CREATE TRIGGER CREATE OR REPLACE TRIGGER nombre_trigger [AFTER|BEFORE] [INSERT|UPDATE|DELETE] ON nombre_tabla FOR EACH [ROW | STATEMENT] EXECUTE PROCEDURE nombre_funcion(); Introducción a SQL - TRIGGER - Ejemplo CREATE TRIGGER check_update BEFORE UPDATE ON accounts FOR EACH ROW WHEN (OLD.balance IS DISTINCT FROM NEW.balance) EXECUTE PROCEDURE check_account_update(); Introducción a SQL - CREATE VIEW Una vista es una alternativa para mostrar datos de varias tablas. Una vista es como una tabla virtual que almacena una consulta. Los datos accesibles a través de la vista no están almacenados en la base de datos como un objeto. CREATE [OR REPLACE] [TEMP | TEMPORARY ] VIEW name [( column name, ... )] AS "query" CREATE VIEW perfil AS SELECT nombre, apellido FROM usuario; Introducción a SQL - Vistas I Ocultan información: permitiendo el acceso a algunos datos y manteniendo oculto el resto de la información que no se incluye en la vista. El usuario solo puede consultar la vista. I Simplifican la administración de los permisos de usuario: se pueden dar al usuario permisos para que solamente pueda acceder a los datos a través de vistas, en lugar de concederle permisos para acceder a ciertos campos, ası́ se protegen las tablas base, de cambios en su estructura. I Mejoran el rendimiento: se puede evitar escribir instrucciones repetidamente almacenando en una vista el resultado de una consulta compleja que incluya información de varias tablas. Introducción a SQL - CREATE INDEX CREATE [UNIQUE] INDEX nombre ON nombre_tabla [USING method] ({ column | expression }) [ASC | DESC] [NULLS { FIRST | LAST }] [WHERE predicado] Introducción a SQL - Índices Método (method) B-Tree (btree) hash GiST GIN Caracterı́sticas Por defecto en PostgreSQL. Permite multiples columnas, ideal para operadores <, <=, =>, > y = Ideal para operador =. No soporta IS NULL Permite multiples columnas Permite multiples columnas Introducción a SQL - INDEXES - Ejemplo CREATE UNIQUE INDEX title_idx ON publication (title); CREATE INDEX despacho_idx ON despacho USING btree (origen, destino); CREATE INDEX ON films ((lower(title))); CREATE INDEX afiliados_idx ON afiliados (monto_cuota) WHERE monto_cuota >= 50; Introducción a SQL - ASSERTIONS Las ASSERTIONS no están implementadas en PostgreSQL, pero pueden ser reemplazadas con otras estrategias, normalmente con una combinación de las siguientes técnicas: I Triggers: Utilizar Triggers para comprobar los valores en las tablas antes de insertar, y después de borrar. para corroborar la correctitud de los datos almacenados. I Sentencias Check: ALTER TABLE cliente ADD CONSTRAINT credito_max CHECK (credito <= 1000);