Escolar Documentos
Profissional Documentos
Cultura Documentos
Bases de Datos
1C 2018
PostgreSQL
Aclaración
En estas diapositivas nos basaremos principalmente en PostgreSQL.
Diferentes motores de bases de datos tienen diferencias de sintaxı́s y
organización.
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 2 / 13
Vistas
Sintaxis
CREATE [ OR REPLACE ][ TEMP | TEMPORARY ][ RECURSIVE ] VIEW name
[( column_name [ , ...] ) ]
[ WITH ( v i e w _o p t i o n _ n a m e [= v i e w _ o p t i o n _ v a l u e ][ , ...]) ]
AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 3 / 13
Vistas
Sintaxis
CREATE [ OR REPLACE ][ TEMP | TEMPORARY ][ RECURSIVE ] VIEW name
[( column_name [ , ...] ) ]
[ WITH ( v i e w _o p t i o n _ n a m e [= v i e w _ o p t i o n _ v a l u e ][ , ...]) ]
AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
Ejemplo
CREATE OR REPLACE VIEW public . album_artist AS
SELECT artist . name , album . album_id , album . title , album . artist_id
FROM artist , album
WHERE artist . artist_id = album . artist_id ;
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 3 / 13
Vistas - Ventajas
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 4 / 13
Vistas Materializadas
Son vistas que si bien representan una visión lógica de los datos son
almacenadas en disco.
Usadas principalmente en data warehouses y aplicaciones de Business
Intelligence
Sintaxis
CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name
[( column_name [ , ...]) ]
[ WITH ( s t or a g e _ p a r a m e t e r [= value ][ , ... ]) ]
[ TABLESPACE t ab l es pa ce _ na me ]
AS query [ WITH [ NO ] DATA
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 5 / 13
Procedimientos Almacenados (Stored Procedures)
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 6 / 13
Procedimientos Almacenados (Stored Procedures)
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 7 / 13
Procedimientos Almacenados (Stored Procedures)
Velocidad de desarrollo mas lenta.
Requiere habilidades especiales
Es dificultoso manejar versiones y es mas complejo depurar
No son portables entre diverentes sistemas de bases de datos.
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 8 / 13
Procedimientos Almacenados (Stored Procedures)
Velocidad de desarrollo mas lenta.
Requiere habilidades especiales
Es dificultoso manejar versiones y es mas complejo depurar
No son portables entre diverentes sistemas de bases de datos.
Sintaxis
CREATE OR REPLACE FUNCTION suma ( p1 integer DEFAULT 0 , p2 integer
DEFAULT 0) RETURNS integer
LANGUAGE ’ plpgsql ’ AS
$BODY$
BEGIN
return p1 + p2 ;
END
$BODY$ ;
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 8 / 13
Procedimientos Almacenados (Stored Procedures)
Velocidad de desarrollo mas lenta.
Requiere habilidades especiales
Es dificultoso manejar versiones y es mas complejo depurar
No son portables entre diverentes sistemas de bases de datos.
Sintaxis
CREATE OR REPLACE FUNCTION suma ( p1 integer DEFAULT 0 , p2 integer
DEFAULT 0) RETURNS integer
LANGUAGE ’ plpgsql ’ AS
$BODY$
BEGIN
return p1 + p2 ;
END
$BODY$ ;
Llamado
select suma (2 ,2) ;
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 8 / 13
Procedimientos Almacenados
pgsql
CREATE OR REPLACE FUNCTION public . getrecords ( tabla text ) RETURNS
integer
LANGUAGE ’ plpgsql ’
AS $BODY$
DECLARE
total INTEGER ;
BEGIN
EXECUTE ’ SELECT COUNT (*) FROM ’ || quote_ident ( tabla ) INTO total
;
RETURN total ;
END ;
$BODY$ ;
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 9 / 13
Procedimientos Almacenados
SQL
CREATE OR REPLACE FUNCTION ge ta rt i st al bu m s ()
RETURNS TABLE ( artist character varying (120) , title character
varying (160) )
LANGUAGE ’ sql ’
AS $BODY$
SELECT artist . name as artist , album . title as title
FROM artist , album
WHERE artist . artist_id = album . artist_id
$BODY$ ;
SQL
SELECT * FROM g e ta rt is t al bu ms ()
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 10 / 13
Triggers/Disparadores
Sintaxis
CREATE TRIGGER trigger_name { BEFORE | AFTER | INSTEAD OF }{ event [ OR ...}
ON table_name [ FOR [ EACH ]{ ROW | STATEMENT }]
EXECUTE PROCEDURE t r i g g e r _ f u n c t i o n _ n a m e
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 11 / 13
Triggers Ejemplo
Auditorı́a de cambios de salarios
CREATE TABLE emp_audit ( emp_audit_id integer , up_date DATE ,
new_sal decimal , old_sal decimal ) ;
Crear Función
CREATE OR REPLACE FUNCTION a c t u a l i z a r _ a u d i t o r i a ()
RETURNS trigger AS
$BODY$BEGIN
insert into emp_audit values ( old . ecod , CURRENT_DATE , new . salario ,
old . salario ) ;
return null
END$BODY$
LANGUAGE plpgsql ;
Crear Trigger
CREATE TRIGGER audit_sal AFTER UPDATE OF salario
ON empleados FOR EACH ROW
WHEN ( OLD . salario IS DISTINCT FROM NEW . salario )
EXECUTE PROCEDURE a c t u a l i z a r _ a u d i t o r i a () ;
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 12 / 13
¿Cómo serı́a en SQL Server?
Dr. Gerardo Rossel (Bases de Datos) SQL: Vistas, Triggers, y Procedimientos Almacenados 13 / 13