Crear Vistas y Procedimientos Almacenados

July 25, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


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 SEEC! 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$ CEA!E -&E( para crear una vista que seleccione solo dos de las columnas de la tabla Products Products.. A continuación, usar$ CEA!E CEA!E +CE/UE 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 SEEC! 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 SEEC! SEEC! 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

 

• • • • •

• • • • •

SEEC! en  en la vista y le pasa el par$metro de entrada como parte instrucción SEEC! de la cl$usula ()EE ()EE.. 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 tet 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 talas, desde la que se !uede acceder a los datos como si fuera una tala. "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 tala, !ero no a toda la tala. $ '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 escriir 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 talas, !or lo que si actuali#amo actuali#amos s los datos de una vista, estamos actuali#ando realmente realmente la tala, y si actuali#amos la tala estos camios serán visiles 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 tala 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 deemos utili#ar la sentencia '01AT1 !ro!orcionar un nomre a la vista y una sentencia S() S1)1'T válida.

VI13, deiendo

'01AT1 VI13 4nomre5vista6  AS -4sentencia5select6  1jem!lo 'rear una vista sore nuestra tala alquileres, en la que se nos muestre el nomre y a!ellidos del cliente en lugar de su c%digo.

'01AT1 VI13

vAlquileres vAlquilere s

 AS S1)1'T nomre, 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 talas. 1n este caso queremos amero y clase de instrucci%n de Transact S(). "esde el Trigger !odremos otener 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  = ANDOR    5co'dicio'U>>  5co'dicio'U>>    WHERE

 

=GROUP BY 5nombre_campo  =,5nombre_campo  U>> =HAVING 5condicion= ANDOR    5co'dicio'U>>  5co'dicio'U>> =ORDER BY 5nombre_campo 5i'dice_cam%o  ASC   =ASC  DESC>   =,5nombre_campo5i'dice_c 5i'dice_cam%o am%o  ASC =ASC  DESC >U>>   a combinación eterna 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  = ANDOR    5co'dicio'U>>  5co'dicio'U>>    WHERE =GROUP BY 5nombre_campo  =,5nombre_campo  U>> =HAVING 5condicion= ANDOR    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  = ANDOR    5co'dicio'U>>  5co'dicio'U>>    WHERE =GROUP BY 5nombre_campo  =,5nombre_campo  U>> =HAVING 5condicion= ANDOR    5co'dicio'U>>  5co'dicio'U>>

U =ORDER BY 5nombre_campo 5i'dice_cam%o  ASC =ASC  DESC>       =,5nombre_campo5i'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_%.aas 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  = ANDOR    5co'dicio'U>>  5co'dicio'U>>    WHERE =GROUP BY 5nombre_campo  =,5nombre_campo  U>> =HAVING 5condicion= ANDOR    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 eiste una
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF