Hola qué tal.
Bienvenidos a este nuevo capítulo del curso completo de base de datos y lo que vamos a ver ahora es
vistas las famosas vistas las vistas que es a gusto de cada uno.
Yo tengo que reconocer que yo no las utilizo no me gustan tengo mis argumentos como para defender mi
postura de que las vistas no son todo lo atractivo que parece pero yo voy a explicarles a ustedes para
que ustedes sean libres y tomen las decisiones que ustedes quieran.
En primer lugar debo decir que las vistas son sentencias Selleck ni siquiera SQL porque no puedo colocar
ni un insert ni un Avda ni un Digit dentro de una vista nuestras vistas son instrucciones Cele que quedan
grabadas en el motor para ejecutarlas cuando nosotros lo deseemos como punto a favor tiene que son.
Es una manera de ofuscar nuestras sentencias SQL a la vista de los curiosos tienen por supuesto como
cualquier objeto del motor se le aplica toda la seguridad de permisos de usuarios para ejecutarlas o
para ser modificadas y lo que tienen es que no son complejas sino que simplemente graban como nosotros
hemos grabado anteriormente en el curso nuestras consultas SQL se guardan en un archivo punto SQL bueno
en este caso no van a quedar grabadas en archivos sino que van a ser objetos de nuestro motor cuáles
son los puntos en contra que yo le encuentro a las vistas las vistas no usan parámetros no aceptan parámetros
entonces las sentencias SQL que nosotros grabamos en su interior es una secuencia es una instrucción
estática siempre va a ser lo mismo siempre va a repetir lo mismo y por supuesto dependiendo los datos
grabados en nuestras tablas va a repetir va a tener una una respuesta diferente en cuanto a los datos.
Ahora las vistas dependen también de que las definiciones que fueron grabadas en ellas no sufran modificaciones.
Por ejemplo si yo hago mención a un campo o a una tabla que luego voy al motor y le cambio el nombre
o la o la borro la vista se va a ver afectada por lo cual cuando yo haga modificaciones en mis tablas
voy a tener que pensar y tomarme el trabajo de ver cuántas vistas están relacionadas con ese campo esa
tabla y es un trabajo bastante tedioso.
La idea es que si nosotros vamos a ofuscar todas nuestras sentencias C.L y las vamos a grabar en vistas.
Imagínense un desarrollo grande cuántas sentencias celeb tiene.
Estamos hablando de cientos de miles.
Entonces vamos a crear un objeto en la base de datos por cada una de ellas.
Estas son algunas de las de las preguntas que yo siempre hago y de los cuestionamientos vamos a ver
cómo crear una vista y ustedes en base a lo que yo les explique.
Luego van a decidir si para lo que ustedes necesitan son aplicables o no para crear una vista simplemente
tengo que ir al motor de base de datos tengo que ir a crear nuevo y voy a crear una vista la solapa
es bastante simple no tiene tantos parámetros como una rutina almacenada pero como aquí no voy a manejar
ni variables ni bucles ni ni voy a poder colocar nada más que una declaración Selleck tal como dice
aquí su título es como que es muy limitada muy muy limitado esto le voy a dar un nombre obviamente voy
a ellos grabaron instruccion Selleck y ustedes van a ver que el motor tiene algunas particularidades
supongamos que yo quiero crear una vista para que me traiga todos los productos de mi tabla productos
para que me los Liste.
Coloco Select Asterisco porque quiero que me muestre todos los campos
de mi tabla productos.
Le voy a dar un nombre a mi vista que va a ser lista de productos y lo voy a grabar fíjense que pasa.
Una de las características que tienen las vistas es que no aceptan los asteriscos.
Entonces yo voy a ir a mi vista lista de productos y lo que haces me reconvierte el asterisco en cada
uno de los campos.
Esto es una contra es una gran contra que tiene las vistas porque no solo visualmente me me coloca todo
en una sola línea y alguien dirá bueno pero lo vamos a acomodando ahí vamos a acomodarlo.
Vamos a grabar esto a que
vamos a acomodar esto aquí y lo vamos a dejar así para que se vea un poquito mejor no del todo pero
mejor lo vamos a grabar vamos a salir de la vista y vamos a volver a entrar.
Todo lo que hemos modificado no tiene validez.
La instrucción se le clava a grabar toda en una sola línea y qué pasa si yo esta instrucción se la voy
a unir a más tablas voy a ser yo y voy a poner cláusula Wear voy a hacer Group va y voy a hacer todo
lo que ustedes saben bueno todo lo va a ubicar en una sola línea con lo cual es muy muy difícil de controlar
y de chequear.
Otro aspecto negativo es que al haberme reemplazado el asterisco por la lista de cada uno de los campos
esto tiene a la contra por decirlo de alguna manera que si yo luego voy a mi tabla productos y le agrego
un campo más.
Ese campo no va a estar listado aquí.
En cambio si ellos sí me permitía guardar el asterisco el asterisco lo va a entender como traerme todos
los campos y yo agregue o quite Campos me va a funcionar perfectamente.
El motivo por el cual yo no uso vistas es porque si bien de primera parecería que esto es muy bueno
porque me permite ofuscar el código también me pasa que al no tener parámetros no puedo hacer vistas
dinámicas no puedo hacer vistas con parámetros dinámicos.
Vamos a ver en unos minutos cómo podemos hacer para lograr esto que yo quiero que una vista funcione
en base a parámetros hay una forma pero es una forma muy rebuscada es una forma no es una forma directa
voy a tener que crear además de mi vista voy a tener que crear un objeto más de tipo función como si
fuera una rutina almacenada pero de tipo función entonces por cada vista dinámica que yo necesite aquella
hemodinámica que yo quiero listar los productos de un proveedor determinado y que quiero usar la misma
vista para listar los del proveedor 5.
Y quiero usar la misma vista para listar los del proveedor 10 y que ese cambio se produzca en base a
un parámetro que yo le paso a la vista cuando la necesito le paso un 5 cuando necesito le paso un 10
bueno para hacer eso en mi ciclo hay que crear una función nuestra una función de usuario que lo vamos
a ver y vamos a poder ejecutarlo pero estaríamos creando por cada vista dinámica dos objetos en la base
de datos.
Esto en principio puede parecer simple pero luego se vuelve inmanejable e incontrolable cuando nosotros
tenemos una base de datos grande con cientos o miles de tablas y cientos o miles de objetos entonces
tenemos que pensar que quizás no son tan buenas como cómo tener el código en una en una aplicación y
que el código va variando.
El objetivo de ofuscar nuestra nuestros datos y el objetivo de ofuscar nuestra conexión a la base de
datos tiene que ver con que algún jactarnos del bloque nos dé compile la aplicación y pueda acceder
a los datos más sensibles son los datos de conexión no las instrucciones Select.
Si nosotros podemos exhibir las instrucciones Selleck y un jaquear accede a ellas no va a poder hacer
nada si él no tiene los datos de la conexión a base de datos.
Si él no sabe dónde está el servidor en qué dirección y P Qué nombre de usuario y password necesita
para conectarse.
Entonces quizás se ha creado un poco de histeria alrededor de esto de ofuscar a ofuscar ofuscar ofuscar
cuando en realidad me parece que hay cosas serias así como las inserciones son serias las actualizaciones
son serias los Dili son muy serios y por eso los vamos a tratar en rutinas almacenadas ahí si vamos
a ofuscar nuestra información no vamos a darle la posibilidad a un hacker de modificar nuestras inserciones.
Pero en lo que son consultas C.L. Yo creo que no hay que exagerar demasiado bueno esta es una simple.
Esta es una simple vista de listar productos vamos a ver cómo se ejecuta ya quedó grabado aquí tenemos
un ícono de Lupita que es el ícono de vista vamos a ver cómo se ejecuta simplemente se trata a la vista
como si fuera una tabla cualquiera se le hace un SELECT FROM Wer y se muestra por pantalla.
Lista de productos lista product.
Hacemos un asterisco from lista de productos.
Esto se ejecuta y me trae todos mis productos con mis proveedores y todos los campos que tengo en la
tabla producto.
Yo aquí podría decirle que solamente me traiga
la descripción como cualquier tabla y me lo va a ejecutar y me va a traer la descripción cuál es la
diferencia cuál es la enorme diferencia que la vista se baje ocultar completa y cuando yo la ejecuto
solamente de lo de todo lo que ejecuto me va a traer la columna de descripción vamos a ver ahora vamos
a ver ahora otra vista que tengo creada y ya la tengo creada antes vamos a hacer click no vamos a grabar
la vista anterior que es lo mismo pero de la tabla proveedores lo mismo de la tabla a proveedores fíjense
que tenemos una serie de parámetros aquí realmente yo no utilizo vistas.
He buscado todo tipo de documentación oficial de Maisí que trate de aclararme un poco en esto.
Yo la verdad prefiero decirles que no lo sé a inventarles una explicación sobre qué pasa con el tema
de los algoritmos esto tiene que ver con cómo va a ejecutar internamente la vista y la verdad que esto
si algún colega mío es ese experto realmente en vistas y lo quiere explicar yo yo al menos prefiero
decirles a ustedes que voy a enseñarles a usar vistas.
Voy a enseñarles los secretos de las vistas pero no puedo explicarles todo porque no lo uso realmente
las he desechado hace muchos años me parecía al principio algo muy atinado muy bueno y después me di
cuenta de que en el mundo real traía más problemas que soluciones.
Vamos a ver ahora el tema que les había prometido que el tema de las funciones de cómo hacer una vista
de manera dinámica cómo colocar un parámetro que va a entrar por afuera para poder filtrar datos en
una vista no es algo sencillo de aprender.
Se los voy aclarando primero vamos a tener que crear una función.
Cuál es esa función es la función por la cual yo vi a parametro voy a pasar un valor y esa función me
va a devolver un valor va a servir de baipás y nada más.
Yo he creado una función llamada proveedor aided.
Esta función es de tipo no SQL fíjense que no hace nada más que un ratón no hace más que devolver lo
que recibió.
Es un pasamanos es una función es una rutina almacenada tipo función devuelve un medio Ninet y es de
tipo determinista rico recuerdan que yo les dije que había solo algunos casos muy muy puntuales por
eso les dije que había un 99 por ciento de veces en que no iban a usar esto y había casos muy muy puntuales
en los que sí hay que usar determinista rico porque esta función no va a hacer nada absolutamente nada
más que devolver un valor.
Cuando ocurre eso no voy a crear una instancia de cada una de ellas en memoria porque va a ser siempre
lo mismo.
Entonces la tildarlos como determinista
hay una característica de esto que no hay parámetro yo no tiene parámetro de entrada tiene simplemente
un parámetro intrínseco en el código.
Esto está permitido y solamente cuando estamos haciendo este tipo de funciones una vez que nosotros
tenemos esta función fíjense lo tonto que es esta función esta función va a recibir un 9 y me va a dar
un 9 nada más que para eso para qué.
Para poder meter esta función dentro de mi vista.
Esta función proveedora y la voy a meter dentro de mi vista y eso va a ser un baipás de un dato que
recibe por un lado y celada a la vista como el resultado de una función.
Ahora vamos a ver la vista la vista es productos por proveedor.
Y aquí volvemos a lo mismo me agregó todo en una sola línea y yo para explicarles tengo que ir a lo
último bueno esto básicamente lo que hace es lista todos los campos o algunos campos de la tabla productos
donde el provided del producto es igual a proveedor aided que es una función Fíjense que aquí está mi
función proveedor aided tengo que colocar el mismo nombre y entre paréntesis por más que me veo devolver
una me va a devolver un valor tiene que estar cerrado vacío.
Esto funciona de esta manera y nada más que de esta manera y ahora vamos a ver la sentencia sé que hay
que hacer para llamar a esto que es un poco compleja para entender bueno y qué ocurre ahora vamos a
ver cómo se llama esto cómo se llama esta vista productos por Prov donde tenemos un llamado a una función
y esa función internamente tiene un parámetro una variable algo que ni siquiera sabemos que es porque
no es un ni un parámetro ni una variable vamos a saber cómo se llama a esto desde nuestro panel de consulta
esto es cómo se llama a nuestra función.
Primero viene un asterisco from como cualquier vista y la vista antes antes de ejecutarse se hace una
sub consulta es la única forma permitida de sus consultas.
Luego de la cláusula from se hace una consulta donde se le asigna al parámetro se le asigna al parámetro
de nuestra función con el dos puntos igual se le asigna un valor de cinco.
Aquí puedo poner el número que yo quiera y luego.
Esto es una especie de alias se lo puedo quitar para no confundir a todo esto se le llama proveedor
o Prov.
Igual no va a aparecer por pantalla es simplemente enunciativo.
Luego se verá por la vista que voy a ejecutar esto es no tiene mucha explicación más que recordar la
sintaxis.
Inclusive este método este método de asignar un valor alã al parámetro está depredados que significa
que pronto lo van a quitar y lo van a modificar.
Vamos a ver qué pasa cuando yo ejecuto esto me va a aparecer un cartel una advertencia lo hace lo ejecuta
aquí tengo vamos a ver primero el cartel lo hace una advertencia que dice que el CTO de variables dentro
de las expresiones está de pecado está ya lo están quitando del lenguaje y va a ser removido en futuras
versiones que tenemos que considerar alternativas como usar la instrucción CED que ya lo vimos en los
procedimientos almacenados usar la instrucción zait o la instrucción Selleck de expresión grabando el
valor dentro de la variable.
Aquí sería Cele 5 Vinto arroba Parham provide.
Si ustedes prueban cualquiera de estas dos opciones aquí no funciona ninguna de las dos.
Por qué todo esto está aclarado y seguramente funciona y de hecho sabemos que funciona de maravilla
en nuestras rutinas almacenadas pero con las vistas es algo mucho más complejo y e inestable si le damos
Aceptar vemos que tenemos todos los productos de nuestro proveedor 5 ha funcionado o no nos trajo todos
los productos.
Yo aquí puedo colocar un 10 para que vean que funciona va a volver a aparecer el mensajito lo cerramos
y aquí tenemos todos los proveedores de todos los productos de nuestro proveedor 10.
Esto es básicamente vistas.
Esto es lo que yo les digo que es más dolor de cabeza que otra cosa por todas las características que
tiene por las falencias que tiene de tener de no tener parámetros intrínsecos en el motor y bueno estaríamos
creando dos objetos por cada consulta dinámica que necesitamos y eso me parece a mí que es una locura.
Seguramente no les ha gustado este capítulo a mí tampoco me ha gustado.
No me gusta explicar vistas porque no me gustan las vistas y tengo mis razones.
Pero bueno lamentablemente me lo han pedido y yo tenía que explicarlo si ustedes encuentran más material.
Recuerden que no soy experto en vistas cuando uno no usa algo no termina por convertirse en experto.
Así que bueno esta es la parte básica y espero que al menos les dé un pantallazo de a qué se están enfrentando.
Nos vemos en el próximo capítulo.
Gracias.