Vous êtes sur la page 1sur 14

1.

DEFINICIN
Las vistas se pueden definir como tablas virtuales basadas en una o ms tablas o vistas y cuyos contenidos vienen definidos por una consulta sobre las mismas. Esta tabla virtual o consulta se le asigna un nombre y se almacena permanentemente en la BD, generando al igual que en las tablas una entrada en el diccionario de datos. Las vistas permiten que diferentes usuarios vean la BD desde diferentes perspectivas as como restringir el acceso a los datos de modo que diferentes usuarios accedan slo aciertas filas o columnas de una tabla. Desde el punto de vista del usuario, la vista es como una tabla real con filas y columnas, pero a diferencia de esta, sus datos no se almacenan fsicamente en la BD. Las filas y columnas de datos visibles a travs de la vista son los resultados producidos por la consulta que define la vista.

1.1 Concepto de vistas


Una vista es una tabla derivada de otras tablas (bsicas o virtuales). Una vista se caracteriza porque: Se considera que forma parte del esquema externo. Una vista es una tabla virtual (no tiene una correspondencia a nivel fsico) Se puede consultar como cualquier tabla bsica. Las actualizaciones se transfieren a la/s tabla/s original/es con ciertas limitaciones).

1.2 CREACION DE VISTAS


La clusula CREATE VIEW permite la creacin de vistas. La clusula asigna un nombre a la vista y permite especificar la consulta que la define. Su sintaxis es: CREATE VIEW id_vista [(columna,)] AS especificacin_consulta; Opcionalmente se puede asignar un nombre a cada columna de la vista. Si se especifica, la lista de nombres de las columnas debe de tener el mismo nmero de elementos que el nmero de columnas producidas por la consulta. Si se omiten, cada columna de la vista adopta el nombre de la columna correspondiente en la consulta. Existen dos casos en los que es obligatoria la especificacin de la lista de columnas:

Segn el propsito con el que se organizan las vistas, pueden clasificarse en los siguientes tipos:

1.2.1 Horizontales o por Restriccin


Son las que restringen el acceso de un usuario a nicamente un conjunto de filas de una tabla. EJEMPLO: Si se desea que un director de ventas vea slo las filas de la tablaRVENTAS, correspondientes a los vendedores de su regin, se debera de definir una vista para cada regin. CREATE VIEW repEste ASSELECT *FROM RVENTASWHERE r_oficina IN (SELECT n_oficinaFROM OFICINASWHERE region = Este); Las vistas horizontales son adecuadas cuando la tabla sobre la que se definen contiene datos que relacionan a varias organizaciones o usuarios, proporcionando una tabla en concreto. privada para cada usuario compuesta nicamente de las filas necesarias para ese usuario

Vistas, Procedimientos y Funciones

OTRO EJEMPLO
1. Definir una vista para el empleado n 102 que contenga solo los pedidos emitidos, por los clientes asignados al mismo. CREATE VIEW emplCientodos CLIENTESWHERE rep_clie = 102); ASSELECT *FROM PEDIDOSWHERE clie IN (SELECT num_clieFROM

pedidos

2. Definir una vista, que muestre nicamente clientes que tienen ms de 30000 en registrados actualmente.2

CREATE VIEW clienTresmil

ASSELECT *FROM CLIENTESWHERE 30000 < (SELECT SUM (importe) FROM PEDIDOSWHERE num_clie = clie); 3. Crear una vista para el Banco Atlntico, que le permita ver la lista de usuarios que pagan en l. CREATE VIEW vistaUsuariosAtlantico BANCOSWHERE nombre = ATLANTICO); ASSELECT *FROM USUARIOSWHERE codigo_banco IN (SELECT ent_sucFROM

Vistas, Procedimientos y Funciones

Son aquellas que restringen el acceso de un usuario slo a ciertas columnas de una tabla. EJEMPLO:

1.2.2 Verticales o por proyeccin

El departamento de procesamiento de pedidos necesita acceso nicamente al nmero de empleado, nombre y oficina asignada al mismo para procesar los pedidos. Crear una vista que muestre esta informacin. CREATE VIEW infoPedidos ASSELECT num_empl, r_oficinaFROM RVENTAS; El uso de estas vistas es aconsejable cuando los datos de la tabla son compartidos tambin por varios usuarios diferentes. La diferencia est en que ahora solo necesitamos parte de los campos, no todos.

1.2.3 Subconjuntos fila / columna


Lo ms habitual es crear vistas con parte de las filas y parte de las columnas de una tabla. Por ejemplo: Definir una vista que contenga el nmero de cliente, el nombre de la empresa y el lmite de crdito de todos los clientes asignados al vendedor Bill Adams. CREATE VIEW clieAdams ASSELECT empresa, lim_creditoFROM CLIENTESWHERE rep_clie = (SELECT num_emplFROM RVENTASWHERE nombre = Bill Adams), OTRO EJEMPLO:

Crear una vista con los datos personales de los usuarios de Luanco. CREATE VIEW clieLuanco localidad = LUANCO;

AS SELECT DNI, nombre, apellidos, domicilio, localidad, CPFROM USUARIOSWHERE

Vistas, Procedimientos y Funciones

1.2.4 Agrupados
Son vistas que incluyen una clusula GROUP BY en la consulta especificada. Estas vistas incluyen siempre una lista de nombres de columna. EJEMPLO: Definir una vista que contenga los datos sumarios de los pedidos para cada vendedor.

CREATE VIEW datSumarios (N_pedidos, Total, Promedio, Mximo, Mnimo, N_vendedor) AS4 SELECT COUNT(*), SUM(importe), AVG(importe), MAX(importe), MIN(importe),repFROM PEDIDOSGROUP BY rep_clie;

OTRO EJEMPLO:
1- Definir una vista que muestre el total de ventas y el promedio de edad de cada oficina. CREATE VIEW totalVentas (Oficina, Total, Promedio_edad) r_oficina; 2- Crear una vista que muestre el nmero de usuarios que pagan en cada banco, junto con el promedio de pago (el mximo y el mnimo). CREATE VIEW usuariosPagan (N_usuarios, Promedio, Mximo, Mnimo,Banco) ASSELECT COUNT(*), AVG(cuota_socio), MAX(cuota_socio), MIN(cuota_socio),codigo_bancoFROM USUARIOSGROUP BY codigo_banco;

AS SELECT r_oficina, SUM(ventas), AVG(edad)FROM RVENTASGROUP BY

Vistas, Procedimientos y Funciones

1.2.4 Compuestas
Son vistas creadas a partir de los datos de dos o ms tablas. Presentan los datos como una nica tabla virtual. Al igual que las anteriores se utilizan frecuentemente para facilitar el manejo de consultas complejas de uso frecuente en la base.

EJEMPLO:

lugar de sus respectivos nmeros. CREATE VIEW infoPedidos

Crear una vista de la tabla PEDIDOS con los nombres de los vendedores y clientes, en

AS SELECTnum_pedido, empresa, nombre,importeFROM PEDIDOS, RVENTAS, CLIENTESWHERE rep = num_emplAND clie = num_clie;

OTRO EJEMPLO1:

Listado del nombre de los clientes y la descripcin e importe total de cada producto de los productos pedidos por el mismo.

CREATE VIEW infoClien (nombre_clie, producto,Total )

ASSELECT empresa, descripcin, SUM(importe)FROM CLIENTES, PEDIDOS, PRODUCTOS5 WHERE num_clie = clieAND id_producto = productoAND id_fab = fab GROUP BY empresa, id_producto, descripcion;

Vistas, Procedimientos y Funciones

1.3 ACTUALIZACIN A TRAVS DE LAS VISTAS


Para que una vista se pueda actualizar debe existir una relacin directa entre las filas y columnas de la vista y las de la tabla fuente. Segn el estndar ANSI, se puede actualizar a travs de las vistas si la consulta que la define, satisface las siguientes restricciones: 1 - No especifica DISTINCT 2 - FROM debe especificar una nica tabla 3 - La lista de seleccin no puede contener expresiones, columnas calculadas o funciones de columna, solo referencias a columnas simples. 4 - WHERE no debe incluir subconsultas. 5 - No debe incluir ni GROUP BY ni HAVING. EJEMPLO: Crear una vista que muestre los vendedores de la regin este. CREATE VIEW repEste AS SELECT * FROM RVENTAS WHERE r_oficina IN (11,12,13); //que seran las situadas al Este Ahora aadimos un nuevo vendedor a travs de la vista. INSERT INTO repEste (num_empl, nombre, r_oficina, edad, ventas) VALUES (113, Jorge Ruiz, 11, 43, 0.00); Ahora resulta que trasladan a otro empleado(104) a otra oficina (12). UPDATE repEste SET r_oficina = 21 //aqu se equivocan y en lugar de poner 12 ponen 21 WHERE num_empl = 104; Con lo cual este seor no figurara en la vista, pero s en la tabla.

Vistas, Procedimientos y Funciones

Vistas, Procedimientos y Funciones

2. CREACIN DE PROCEDIMIENTOS
Sintaxis de un procedimiento PLSQL: CREATE OR REPLACE PROCEDURE [esquema].nombre-procedimiento (nombre-parmetro {IN, OUT, IN OUT} tipo de dato, ..) {IS, AS} Declaracin de variables; Declaracin de constantes; Declaracin de cursores; BEGIN Cuerpo del subprograma PL/SQL; EXCEPTION Bloque de excepciones PL/SQL; END;

Aclaraciones sobre la sintaxis:


Nombre-parmetro: es el nombre que nosotros queramos dar al parmetro. Podemos utilizar mltiples parmetros. En caso de no necesitarlos podemos omitir los parntesis. IN: especifica que el parmetro es de entrada y que por tanto dicho parmetro tiene que tener un valor en el momento de llamar a la funcin o procedimiento. Si no se especifica nada, los parmetros son por defecto de tipo entrada.

OUT: especifica que se trata de un parmetro de salida. Son parmetros cuyo valor es devuelto despus de la ejecucin el procedimiento al bloque PL/SQL que lo llam. Las funciones PLSQL no admiten parmetros de salida. IN OUT: Son parmetros de entrada y salida a la vez. Tipo-de-dato: Indica el tipo de dato PLSQL que corresponde al parmetro (NUMBER, VARCHAR2, etc).

Vistas, Procedimientos y Funciones

Al crear un procedimiento almacenado, las instrucciones que contiene se analizan para verificar si son correctas sintcticamente. Si se encuentra algn error, el procedimiento se compila, pero aparece un mensaje "con advertencias" que indica tal situacin. Un procedimiento almacenado se invoca llamndolo. En primer lugar se deben tipear y probar las instrucciones que se incluyen en el procedimiento almacenado, luego, si se obtiene el resultado esperado, se crea el procedimiento.

Los procedimientos almacenados pueden hacer referencia a tablas, vistas, a funciones definidas por el usuario y a otros procedimientos almacenados.

Un procedimiento almacenado pueden incluir cualquier cantidad y tipo de instrucciones definicin de datos, como create..., drop... alter...).

DML (de manipulacin de datos, como insert, update, delete), no instrucciones DDL (de

Para crear un procedimiento almacenado empleamos la instruccin "create procedure". La sintaxis bsica parcial es: Create Or replace procedure NOMBREPROCEDIMIENTO As Begin INSTRUCCIONES End; El bloque de instrucciones comienza luego de "begin" y acaba con "end". Si empleamos "Or replace", se sobreescribe (se reemplaza) un procedimiento existente; si se omite y existe un procedimiento con el nombre que le asignamos, Oracle mostrar un mensaje de error indicando tal situacin.

Para diferenciar los procedimientos almacenados del sistema de los procedimientos almacenados creados por el usuario use un prefijo, por ejemplo "pa_" cuando les de el nombre.

Vistas, Procedimientos y Funciones

Con las siguientes instrucciones creamos un procedimiento almacenado llamado "pa_libros_aumentar10" que incrementa en un 10% el precio de todos los libros: Create procedure pa_libros_aumentar10 As Update libros set precio=precio+precio*0.1; Entonces, creamos un procedimiento almacenado colocando "create procedure" (o "create seguido de "as" las sentencias que definen el procedimiento. Para ejecutar el procedimiento almacenado creado anteriormente tipeamos: Execute pa_libros_aumentar10; Entonces, para ejecutar un procedimiento almacenado colocamos "execute" seguido del nombre del procedimiento.

Or replace", si es que desea reemplazar el existente), luego el nombre del procedimiento y

2.1 CREACIN DE FUNCIONES


Las funciones en SQL Server al igual que las funciones en diversos lenguajes

de programacin, estn incluidas en el motor de la base de datos y tambin el usuario puede crear las propias, estas funciones son rutinas que aceptan parmetros, realizan una accin, como un clculo complejo, y devuelven el resultado de esa accin como un valor.

Vistas, Procedimientos y Funciones

10

2.1.1Ventajas
Permiten una programacin modular: Puede crear la funcin una vez, almacenarla en la base de datos y llamarla desde el programa tantas veces como desee.

Permiten una ejecucin ms rpida. Al igual que los procedimientos almacenados, las funciones definidas por el usuario Transact-SQL reducen el costo de compilacin del cdigo Transact-SQL repetidas.

almacenando los planes en la cach y reutilizndolos para ejecuciones Pueden reducir el trfico de red. Una operacin que filtra datos sola expresin escalar se puede expresar como una funcin. La nmero de filas que se envan al cliente.

basndose en restricciones complejas que no se puede expresar en una funcin se puede invocar en la clusula WHERE para reducir el

Vistas, Procedimientos y Funciones

11

Nombre-parmetro: es el nombre que nosotros queramos dar al parmetro. Podemos utilizar mltiples parmetros. En caso de no necesitarlos podemos omitir los parntesis.

IN: especifica que el parmetro es de entrada y que por tanto dicho parmetro tiene que tener un valor en el momento de llamar a la funcin o procedimiento. Si no se especifica nada, los parmetros son por defecto de tipo entrada.

OUT: especifica que se trata de un parmetro de salida. Son parmetros cuyo valor es devuelto despus de la ejecucin el procedimiento al bloque PL/SQL que lo llam. Las funciones PLSQL no admiten parmetros de salida.

IN OUT: Son parmetros de entrada y salida a la vez. (NUMBER, VARCHAR2, etc).

Tipo-de-dato: Indica el tipo de dato PLSQL que corresponde al parmetro

2.2 EXCEPCIONES
En PL/SQL una advertencia o condicin de error es llamada una excepcin.
DECLARE

Las excepciones se controlan dentro de su propio bloque.

-- Declaraciones BEGIN EXCEPTION END; -- Ejecucin -- Excepcin Las excepciones pueden ser definidas en forma interna o explcitamente por el usuario. Ejemplos de excepciones definidas en forma interna son la divisin por cero y la

falta de memoria en tiempo de ejecucin. Estas mismas condiciones excepcionales tienen sus propio tipos y pueden ser referenciadas por ellos: ZERO_DIVIDE y STORAGE_ERROR. utilizando la sentencia RAISE. Las excepciones definidas por el usuario deben ser alcanzadas explcitamente

Vistas, Procedimientos y Funciones

12

DECLARACIN
DECLARE BEGIN -- Declaraciones -- Ejecucin EXCEPTION WHEN NO_DATA_FOUND THEN NO_DATA_FOUND -- Se ejecuta cuando ocurre una excepcin de tipo

WHEN ZERO_DIVIDE THEN ZERO_DIVIDE -- Se ejecuta cuando ocurre una excepcin de tipo

WHEN OTHERS THEN

-- Se ejecuta cuando ocurre una excepcin de un tipo no tratado

-- en los bloques anteriores

Vistas, Procedimientos y Funciones

13

Vous aimerez peut-être aussi