Crear Vistas y Procedimientos Almacenados
July 25, 2022 | Author: Anonymous | Category: N/A
Short Description
Download Crear Vistas y Procedimientos Almacenados...
Description
Crear vistas y procedimientos almacenados
Ahora que Mary puede tener acceso a la base de datos TestData TestData,, puede que desee crear algunos objetos de base de datos, como una vista o un procedimiento almacenado y concederle a Mary acceso a los mismos. Una vista es una instrucción SEEC! almacenada y un procedimiento almacenado es una o varias instrucciones !ransact"S# ! ransact"S# que se ejecutan como como un lote. as vistas se consultan como las tablas y no aceptan par$metros. os procedimientos almacenados almacenados son m$s complejos que las vistas. os procedimientos almacenados pueden tener par$metros de entrada y salida y pueden contener instrucciones para controlar el %ujo del código, como instrucciones &' y ()&E. Una pr$ctica recomendable de programación es usar procedimientos almacenados para reali*ar todas las tareas repetitivas en la base de datos. +ara este ejemplo, usar$ CEA!E -&E( para crear una vista que seleccione solo dos de las columnas de la tabla Products Products.. A continuación, usar$ CEA!E CEA!E +CE/UE para crear un procedimiento almacenado que acepta un par$metro de precio y devuelve solo los productos cuyo costo es menor que el valor del par$metro especi0cado.
+ara crear una vista •
• • • •
Ejecute la instrucción siguiente para crear una vista muy sencilla que ejecuta una instrucción SEEC! y devuelve los nombres y los precios de nuestros productos al usuario. CREATE VIEW vw_Names AS SELECT ProductName, Price FROM Products !O
+ruebe la vista •
• •
as vistas se tratan como tablas. Use una instrucción SEEC! SEEC! para para tener acceso a la vista. SELECT " FROM vw_Names !O
crear un procedimiento almacenado +ara crear almacenad o •
a siguiente instrucción crea un procedimiento almacenado denominado pr12ames pr12ames,, acepta un par$metro de entrada denominado 3-ar+rice 3-ar+rice del del tipo de datos money money.El .El procedimiento almacenado imprime la instrucción +roducts less than concatenada than concatenada con el par$metro de entrada que cambia del tipo de datos money money a a un tipo de datos de car$cter varchar4567 varchar4567.. A continuación, el procedimiento ejecuta una
• • • • •
• • • • •
SEEC! en en la vista y le pasa el par$metro de entrada como parte instrucción SEEC! de la cl$usula ()EE ()EE.. Esto devuelve todos los productos cuyo costo es menor que el valor del par$metro de entrada. CREATE PROCE#$RE %r_Names &VarPrice mo'e( AS )E!IN ** T+e %ri't stateme't retur's tet to t+e user PRINT -Products .ess t+a' - / CAST0&VarPrice CAST0&VarPr ice AS
varc+ar01233 ** A seco'd stateme't starts +ere SELECT ProductName, ProductName , Price FROM vw_Names W4ERE Price 5 &varPrice EN# !O
+robar el procedimiento almacenado •
• •
+ara probar el procedimiento almacenado, escriba y ejecute la instrucción siguiente. El procedimiento debe devolver los nombres de dos productos introducidos en la tabla +roducts +roducts en en la lección 5 con un precio menor que 56.66 56.66.. E6EC$TE %r_Names 12722 !O
7. Vistas, Procedimientos y Trigger 7. Vistas, Procedimientos y Triggers VISTAS Una vista es una consulta, que refleja el contenido de una o más talas, desde la que se !uede acceder a los datos como si fuera una tala. "os son las !rinci!ales ra#ones !or las que !odemos crear vistas.
$ Seguridad, nos !ueden interesar que los usuarios tengan acceso a una !arte de la informaci%n que &ay en una tala, !ero no a toda la tala. $ 'omodidad, como &emos dic&o el modelo relacional no es el más comodo !ara visuali#ar los datos, lo que nos !uede llevar a tener que escriir com!lejas sentencias S(), tener una vista nos sim!lifica esta tarea. )as vistas no tienen una co!ia f*sica de los datos, son consultas a los datos que &ay en las talas, !or lo que si actuali#amo actuali#amos s los datos de una vista, estamos actuali#ando realmente realmente la tala, y si actuali#amos la tala estos camios serán visiles desde la vista. +ota +o siem!re !odremos actuali#ar los datos de una vista, de!enderá de la com!lejidad de la misma -de!enderá de si el conjunto de resultados tiene acceso a la clave !rinci!al de la tala o no, y del gestor de ase de datos. +o todos los gestores de ases de datos !ermiten actuali#ar vistas, /0A')1, !or ejem!lo, no lo !ermite, mientras que S() Server s*.
7.2 'reaci%n de vistas. Para crear una vista v ista deemos utili#ar la sentencia '01AT1 !ro!orcionar un nomre a la vista y una sentencia S() S1)1'T válida.
VI13, deiendo
'01AT1 VI13 4nomre5vista6 AS -4sentencia5select6 1jem!lo 'rear una vista sore nuestra tala alquileres, en la que se nos muestre el nomre y a!ellidos del cliente en lugar de su c%digo.
'01AT1 VI13
vAlquileres vAlquilere s
AS S1)1'T nomre, a!ellidos, matricula 80/9 tAlquileres, t'lientes 3:101 - tAlquileres.codigo5cliente
;
t'lientes.codigo
Si queremos, modificar la definici%n de nuestra vista !odemos utili#ar la sentencia A)T10 VI13, de forma muy !arecida a como lo &aciamos con las talas. 1n este caso queremos amero y clase de instrucci%n de Transact S(). "esde el Trigger !odremos otener los datos de la fila que se &a modificado o a 5nombre_campo =,5nombre_campo U> !ROM 5 5nombre_tabla =LE!T-RIGHT OUTER OIN 5nombre_tabla ON }] =WHERE 5condicion = ANDOR 5co'dicio'U>> 5co'dicio'U>> WHERE
=GROUP BY 5nombre_campo =,5nombre_campo U>> =HAVING 5condicion= ANDOR 5co'dicio'U>> 5co'dicio'U>> =ORDER BY 5nombre_campo 5i'dice_cam%o ASC =ASC DESC> =,5nombre_campo5i'dice_c 5i'dice_cam%o am%o ASC =ASC DESC >U>> a combinación eterna puede ser diestra o siniestra, LEFT OUTER 5OIN o 5OIN o RIGHT OUTER 5OIN% Con LEFT OUTER 5OIN obtenemos 5OIN obtenemos todos los registros de en la tabla que situemos a la i*quierda de la clausula clausula 5OIN8 5OIN8 mientras que con RIGHT OUTER 5OIN obtenmos 5OIN obtenmos el e 5nombre_campo =,5nombre_campo U> 5 5nombre_tabla !ROM =LE!T-RIGHT OUTER OIN 5nombre_tabla ON }] =WHERE 5condicion = ANDOR 5co'dicio'U>> 5co'dicio'U>> WHERE =GROUP BY 5nombre_campo =,5nombre_campo U>> =HAVING 5condicion= ANDOR 5co'dicio'U>> 5co'dicio'U>> UNION /ALL - DISTINCT 0 SELECT ALL ALL - DISTINCT = DISTINCT > 5nombre_campo =,5nombre_campo U> !ROM 5 5nombre_tabla =LE!T-RIGHT OUTER OIN 5nombre_tabla ON }] =WHERE 5condicion = ANDOR 5co'dicio'U>> 5co'dicio'U>> WHERE =GROUP BY 5nombre_campo =,5nombre_campo U>> =HAVING 5condicion= ANDOR 5co'dicio'U>> 5co'dicio'U>>
U =ORDER BY 5nombre_campo 5i'dice_cam%o ASC =ASC DESC> =,5nombre_campo5i'dice_c 5i'dice_cam%o am%o ASC =ASC DESC >U>> +ara utili*ar la clausula UNION debemos cumplir una serie de normas. •
•
as consultas a unir deben tener el mismo nRmero campos, y adem$s los campos deben ser del mismo tipo. Sólo puede haber una Rnica clausula ORDER BY al 0nal de la sentencia SELECT SELECT.. El siguiente ejemplo muestra el uso de UNION
SELECT tMarcas7marca, tCoc+es7matricu.a, tCoc+es7matricu.a, SELECT tCoc+es7mode.o,
tCoc+es7co.or, tCoc+es7'umero_i.ometros, tCoc+es7'um_%.aas FROM tCoc+es FROM tCoc+es INNER OIN tMarcas ON tCoc+es7marca ON tCoc+es7marca : tMarcas7cod tMarcas7codiKo iKo $NION SELECT tMotos7matricu.a, SELECT tMotos7matricu.a, tMarcas7marca, tMotos7mode.o, tMotos7co.or, tMotos7'umero_i.ometros, 2 FROM tMotos FROM tMotos INNER OIN tMarcas ON tMotos7marca ON tMotos7marca : tMarcas7codiKo +uede observarse el uso de la constante cero en la segunda lista de selección para hacer coincidir el nRmero y tipo de campos que devuelve la consulta U2&
Co#su&tas a"re"adas La c&'usu&a GROUP BY a clausula GROUP BY combina combina los registros con valores idGnticos en un Rnico registro.. +ara cada registro se puede crear un valor agregado si se incluye una registro 5nombre_campo =,5nombre_campo U> =, U> !ROM 5 5nombre_tabla 5nombre_vista =,5nombre_tabla 5nombre_vista U> =WHERE 5condicion = ANDOR 5co'dicio'U>> 5co'dicio'U>> WHERE =GROUP BY 5nombre_campo =,5nombre_campo U>> =HAVING 5condicion= ANDOR 5co'dicio'U>> 5co'dicio'U>> =ORDER BY 5nombre_campo 5i'dice_cam%o ASC =ASC DESC> =,5nombre_campo 5i'dice_cam%o ASC =ASC DESC >U>> GROUP BY es es opcional. Si se utili*a GROUP BY pero pero no eiste una
View more...
Comments