Otros objetos de Base de Datos



Documentos relacionados
Nociones de performance

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Diseño de bases de datos

Un ejemplo teórico de trigger podría ser éste:

Maestría en Bioinformática. Bases de Datos y Sistemas de Información. Diseño Lógico. Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

Oracle 12c DISEÑO Y PROGRAMACIÓN

Programación SQL. Lucio Salgado Diciembre 2008

ADMINISTRACIÓN DE BASE DE DATOS

1

Formato para prácticas de laboratorio

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: DDL. Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Disparadores en ORACLE

RESTRICCIONES DE DOMINIOS

PRÁCTICA III. DISPARADORES EN SQL (II)

SQL (Structured Query Language)

Disparadores en Oracle (Ejemplos Prácticos)

Base de datos relacional

Procedimientos, Funciones, Trigger y Cursores en ORACLE

Laboratorio Informix. Stored Procedures Triggers

- Bases de Datos - - Diseño Físico - Luis D. García

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

Enlaces relacionados:

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

E16 - Diseño de Sistemas de Bases de Datos Boletín 3

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Haga clic para PostgreS cambiar el estilo

Tema 1. Bases de datos activas

Consultas con combinaciones

BASE DE DATOS - CURSO 02/03 PRÁCTICA 2: SQL: Lenguaje de definición de datos (DDL)

MANUALITO MS-SQL SERVER

Tema 1. Bases de datos activas

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Integridad y Seguridad en los sistemas de Bases de Datos. Javier Escobar Luis Ramirez Omar Asprino

Administradores de Bases de Datos Studio.NET 2005 Y SQL Server Barrios

Oracle Básico PL/SQL

BASES DE DATOS AVANZADAS Transacciones en MYSQL

Tutorial Oracle SQL Developer 1.2.1

LENGUAJE ESTRUCTURADO DE CONSULTAS SQL (2)

Bibliografía Oracle Database Concepts - 10g Release 2 (10.2) (Octubre 2005)

Funciones y TriggersIntroducción, Ejemplos

6- Combinación de tablas

Bases de datos relacionales y el modelo entidad-relación

GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Curso Online de Oracle 10g

SQL y XML en Oracle XE 11g. Laboratorio de Bases de datos Jonathan Medina Gómez

T12 Vistas y tablas temporales

Base de datos Procedimientos Almacenados y Funciones

Formato para prácticas de laboratorio

Triggers 24/12/2016. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5

Bases de Datos / Elementos de Bases de Datos Que es un Stored Procedure? Stored Procedures: Ventajas

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1

Restricciones de Integridad

Acceso a bases de datos MySQL con PHP

FIREBIRD: SQL PROCEDIMENTAL (PSQL)

CONSULTAS BASICAS EN SQL SERVER

LENGUAJE DE CONSULTA ESTRUCTURADO - SQL CONTENIDO

LABORATORIO 2. POSTGRE SQL - BASE DE DATOS SECRETARIA DE HACIENDA

PL/SQL avanzado: Secuencias, triggers, cursores y subprogramas

Estándares para la construcción de Sentencias SQL

Procedimientos Almacenados con InterBase

Oracle básico (IV): Programación en PL/SQL

Bases de Datos: Structured Query Language (SQL)

A. Introducción. B. Los DATABASES TRIGGERS. PL/SQL en objetos de la base de datos. Oracle 11g - SQL, PL/SQL, SQL*Plus 271

OBJETIVOS METODOLOGÍA PROCEDIMIENTO 1.- Trabajo con el servidor de bases de datos Sybase

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

Un nombre de usuario de 30 caracteres o menos, sin caracteres especiales y que inicie con una letra.

GALA CONCEPTO COMMIT, ROOLBACK SAVEPOINTS (SAVE TRANSACTION) No Consultas. Definiciones Transacciones ( L33 )

Práctica 3. Consultas SQL

Formatos para prácticas de laboratorio

Base de datos I Facultad de Ingeniería. Escuela de computación.

CREATE USER ADMINISTRADOR IDENTIFIED BY ADMIN DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA 500K ON USERS;

Ing. Santiago C. Pérez Laura Noussan Lettry Carlos Campos

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

SQL: Vistas, Triggers, y Procedimientos Almacenados

A.1. Definiciones de datos en SQL

UNIVERSIDAD AUTONOMA DE LOS ANDES UNIANDES LENGUAJE SQL. SQL es un estándar un lenguaje estructurado para consultas

INSTITUCIÓN EDUCATIVA GABRIEL GARCIA MÁRQUEZ BASE DE DATOS. DESARROLLO DE SOFTWARE Página 1 de 28 SQL SQL

Sub consultas avanzadas

Estándar de desarrollo de aplicaciones del Govern de les Illes Balears

Laboratorios de BASES DE DATOS. (I.T. Informática)

Bases de Datos 2. Teórico

BASES DE DATOS EN VISUAL BASIC ACCESS + SQL

Administración Básica de Oracle9i.

Microsoft SQL Server 2005

Triggers. BASES DE DATOS Mercedes García Merayo

Los paquetes tienen dos partes: una especificación y un cuerpo que están almacenados por separado en la base de datos.

Bases de Datos Relacionales

Manipulando Datos. y Transacciones

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

Programación de Consultas SQL ADO.Net LDP / DUOC-AV

Transcripción:

Maestría en Bioinformática Bases de Datos y Sistemas de Información Otros objetos de Base de Datos Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy

Agenda Secuencias Triggers Vistas Código almacenado Motivación Sentencia CREATE SEQUENCE Utilización

Agenda Secuencias Triggers Vistas Código almacenado Motivación Sentencia CREATE TRIGGER Utilización Autonumerados con secuencias y triggers

Agenda Secuencias Triggers Vistas Código almacenado Motivación Sentencia CREATE VIEW Utilización

Agenda Secuencias Triggers Vistas Código almacenado Motivación Estructura básica de PL/SQL Procedimientos y Funciones

Agenda Secuencias Triggers Vistas Código almacenado Motivación Sentencia CREATE SEQUENCE Utilización

Secuencias Motivación Una secuencia es un objeto de esquema que permite obtener números que no se repiten Es muy común utilizar secuencias para asignar números que deben ser diferentes, como los de una surrogate key en una tabla Lo anterior no asegura que los números sean consecutivos y sin huecos, por lo que no es el método a elegir si se requiere que no existan huecos (como en el caso de números de factura)

Secuencias Sentencia CREATE SEQUENCE create sequence <nombre_secuencia> start with 1 increment by 1; Ejemplo SQL> create table movimientos ( 2 id integer not null primary key, 3 origen integer not null, 4 destino integer not null, 5 monto number(12,2) not null 6 ); Table created. SQL> create sequence seq_movimientos start with 1 increment by 1; Sequence created.

Secuencias Utilización Las secuencias tienen funciones currval y nextval que devuelven el valor actual y el próximo valor SQL> select seq_movimientos.nextval from dual; 1 SQL> select seq_movimientos.nextval from dual; 2 SQL> select seq_movimientos.currval from dual; 2 La función nextval, además, adelanta la secuencia al próximo valor Si SIEMPRE insertamos nextval en una surrogate key nos aseguramos que no habrá valores repetidos

Secuencias Utilización SQL> insert into movimientos(id, origen, destino, monto) 2 values (seq_movimientos.nextval, 1111, 2222, 500); 1 row created. SQL> insert into movimientos(id, origen, destino, monto) 2 values (seq_movimientos.nextval, 2222, 3333, 1000); 1 row created. SQL> select * from movimientos; ID ORIGEN DESTINO MONTO ---------- ---------- ---------- ---------- 3 1111 2222 500 4 2222 3333 1000

Agenda Secuencias Triggers Vistas Código almacenado Motivación Sentencia CREATE TRIGGER Utilización

Triggers Motivación Un trigger es un código almacenado que se ejecuta disparado por alguna sentencia Se utilizan para automatizar tareas que deben realizarse cada vez que se ejecuta una sentencia, por ejemplo, para objetivos de auditoría Se puede especificar que se disparen antes o después de una sentencia, usualmente DML (before insert, after update, etc)

Sentencia CREATE TRIGGER Triggers create trigger <nombre_trigger> {before after} {insert update delete} on <nombre_tabla> for each row [when (<predicado>)] begin <codigo> end; Se puede referenciar el estado anterior de la tupla (en casos de update y delete) mediante :old Se puede referenciar el estado final de la tupla (en casos de update e insert) mediante :new

Triggers Utilización Ejemplo: copiar los movimientos grandes a otra tabla SQL> create table grandes_movimientos 2 as (select * from movimientos where 0=1); Table created. SQL> create trigger trg_grandes_movimientos 2 after insert on movimientos 3 for each row 4 when (new.monto >= 10000) 5 begin 6 insert into grandes_movimientos 7 values (:new.id, :new.origen, :new.destino, :new.monto); 8 end; 9 / Trigger created.

Triggers Utilización SQL> select * from grandes_movimientos; no rows selected SQL> insert into movimientos(id, origen, destino, monto) 2 values (seq_movimientos.nextval, 4444, 5555, 9900); 1 row created. SQL> insert into movimientos(id, origen, destino, monto) 2 values (seq_movimientos.nextval, 6666, 7777, 10500); 1 row created. SQL> select * from grandes_movimientos; ID ORIGEN DESTINO MONTO ---------- ---------- ---------- ---------- 6 6666 7777 10500

Triggers Utilización Otro caso de uso: auditoría SQL> create table aud_m as (select * from movimientos where 0=1); SQL> alter table aud_m add (fmod date, umod varchar2(10)); SQL> create trigger trg_audit_movimientos 2 after update on movimientos 3 for each row 4 begin 5 insert into aud_m(id, origen, destino, monto, fmod, umod) 6 values (:old.id, :old.origen, :old.destino, :old.monto, 7 sysdate, user); 8 end; 9 /

Triggers Utilización SQL> update movimientos set monto = 9999 where id = 6; 1 row updated. SQL> select * from aud_m; ID ORIGEN DESTINO MONTO FMOD UMOD ---------- ---------- ---------- ---------- --------- ---------- 6 6666 7777 10500 31-MAY-12 RRHH SQL> select * from movimientos where id = 6; ID ORIGEN DESTINO MONTO ---------- ---------- ---------- ---------- 6 6666 7777 9999

Triggers Autonumerados con secuencias y triggers Algunos RDBMS permiten la definición de columnas autonumeradas en la sentencia CREATE TABLE DB2: id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY MySQL: id INT NOT NULL AUTO_INCREMENT PRIMARY KEY En otros (como Oracle y PostgreSQL) no existe esta funcionalidad pero se puede lograr con secuencias y defaults o secuencias y triggers

Triggers Autonumerados con secuencias y triggers create table paises(id number, nombre varchar2(20)); create sequence s_paises start with 1 increment by 1; create trigger bi_paises before insert on paises for each row begin :new.id := s_paises.nextval; end; / insert into paises(nombre) values ('Uruguay'); insert into paises(nombre) values ('Argentina'); SQL> select * from paises; ID NOMBRE ---------- -------------------- 1 Uruguay 2 Argentina

Agenda Secuencias Triggers Vistas Código almacenado Motivación Sentencia CREATE VIEW Utilización

Vistas Motivación Las vistas son consultas (SELECTs) almacenadas con un nombre Hay por lo menos dos buenos motivos para crear vistas 1. Simplificar el código y ofrecer vistas apropiadas de los datos 2. Permitir controlar la seguridad con una granularidad más fina que la de tabla

Vistas Motivación Imagine un sistema de gestión de RRHH, y una tabla EMPLEADOS con columnas: cedula, nombre, sueldo, dirección y teléfono A alguien que trabaja en liquidación de sueldos se le querrían dar privilegios de SELECT y UPDATE sobre la columna sueldo, pero no dirección ni teléfono Al médico certificador, se le querrían dar privilegios de SELECT sobre la columna dirección y teléfono, pero no sueldo

Vistas Sentencia CREATE VIEW create view <nombre_vista> as <sentencia-select> Una vez creada, la vista se puede consultar (SELECT) como si fuera una tabla más Dependiendo cómo se haya creado la vista, y cuál sea el RDBMS, tal vez la vista se pueda modificar (en la mayoría de los RDBMSs no todas las vistas teóricamente modificables se pueden modificar) Se pueden asignar privilegios sobre la vista (e.g. GRANT SELECT ON EMPLEADOS_DIR TO MEDICO)

Vistas Utilización Es común crear vistas para facilitar las consultas create view v_empleados as select e.id, e.nombre, e.apellido, e.mail, c.nom_cargo cargo, d.nom_departamento departamento, e.sueldo from empleados e, departamentos d, cargos c where e.cargo = c.id_cargo and e.departamento = d.id_departamento;

Vistas Utilización Es común crear vistas para aplicar el principio del menor privilegio (los usuarios deben tener privilegios para hacer todo lo que necesitan hacer, y ningún privilegio más) Note que se pueden restringir los privilegios por columnas (mediante proyección) y por tuplas (mediante selección) create view v_empleados_dir_03 as select e.id, e.nombre, e.apellido, e.direccion, e.telefono from empleados e where departamento = 3; -- Departamento 3 = Rocha grant select on v_empleados_dir_03 to medico_rocha;

Agenda Secuencias Triggers Vistas Código almacenado Motivación Estructura básica de PL/SQL Procedimientos y funciones

Código almacenado Motivación Imagine un sistema bancario, donde se debe asegurar que las transferencias siempre se realizan de la misma manera Es necesario hacer un programa, en cualquier lenguaje (e.g. Java, C, Ruby), que realice las transferencias Los RDBMSs nos ofrecen una alternativa a realizar estos programas con lenguajes externos, y es un lenguaje interno del DBMS que queda almacenado en la propia base Casi todo los RDBMSs ofrecen uno: Oracle (PL/SQL), DB2 (SQL PL), PostgreSQL (PL/PgSQL), MySQL

Código almacenado Motivación Los lenguajes procedurales permiten además ejecutar SQL estático, evitando la preparación del plan de acceso en cada ejecución Desde hace unos años, DB2 ofrece cada vez más compatibilidad con el PL/SQL de Oracle, para facilitar la migración de Oracle a DB2

Estructura básica de PL/SQL Código almacenado PL/SQL se estructura en bloques, definidos por las palabras clave DECLARE, BEGIN, EXCEPTION y END: DECLARE -- -- sección declarativa (opcional) -- BEGIN -- -- sección ejecutable (obligatoria) -- EXCEPTION -- -- manejo de excepciones (opcional) -- END

Estructura básica de PL/SQL Código almacenado Ejemplo de un programa mínimo BEGIN -- Sacamos 500 de la cuenta 19 update cuentas set monto = monto 500 where id = 19; -- Agregamos 500 a la cuenta 73 update cuentas set monto = monto + 500 where id = 73; -- Registramos el movimiento insert into movimientos(origen, destino, monto) values (19, 73, 500) END; Qué nos hace falta para hacerlo genérico?

Procedimientos y funciones Código almacenado Los bloques PL/SQL pueden: Ser anónimos (como el del ejemplo anterior) Tener nombre: procedimientos y funciones Procedimientos Pueden tener parámetros Usualmente modifican la instancia Funciones Pueden tener parámetros Retornan un valor Usualmente no modifican la instancia

Procedimientos y funciones Ejemplo de procedimiento Código almacenado CREATE OR REPLACE PROCEDURE TRANSFERIR( V_ORIGEN IN NUMBER, V_DESTINO IN NUMBER, V_MONTO IN NUMBER) IS BEGIN -- Sacamos V_MONTO de la cuenta V_ORIGEN update cuentas set monto = monto V_MONTO where id = V_ORIGEN; -- Agregamos V_MONTO a la cuenta V_DESTINO update cuentas set monto = monto + V_MONTO where id = V_DESTINO; -- Registramos el movimiento insert into movimientos(origen, destino, monto) values (V_ORIGEN, V_DESTINO, V_MONTO) END;

Código almacenado Queda mucho por ver, se podría hacer un curso entero de programación sobre bases de datos Tutorial amigable sobre PL/SQL Inglés Building with blocks Controlling the Flow of Execution Working with Strings Working with Numbers Working with Dates Error Management Working with Records Español Construyendo con bloques en PL/SQL Aún no Aún no Aún no Aún no Aún no Aún no