Professional Documents
Culture Documents
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