Hola qué tal.
Bienvenidos a esta nueva sección que se añadió así por pedido de los usuarios que tiene que ver con
temas muy avanzados que escapaban al alcance de nuestro curso.
Pero qué bueno realmente yo quiero que ustedes estén conformes y voy a ir añadiendo temas conforme lo
vayan pidiendo y me den las posibilidades de tiempo obviamente.
Pero como estos son temas bastante importantes quise meterlos quise meterlos para que no se queden con
sabor a que faltaba.
Voy a explicar por qué no los metí o por qué al menos este que vamos a ver ahora que es rutinas almacenadas
no los metí mis shikon incorporó las rutinas almacenadas a partir de la versión 5.0 .3 es algo muy nuevo
en mi ciclo están todavía desarrollando todavía lo están perfeccionando.
Va a haber cambios y si ustedes vienen del mundo de cinco al server o vienen del mundo de hora se van
a encontrar con que tienen como una especie de sabor a poco porque no están tan desarrolladas y porque
realmente hay muchas cosas que ustedes pueden hacer en esos otros motores que aquí no van a poder hacer.
No voy a dar una lista porque realmente lo que importa ahora es que ustedes aprendan lo más fiable mente
posible.
Las rutinas almacenadas.
Primero voy a explicarles qué son y después vamos a ir al detalle de cómo crearlas y qué parámetros
y qué cosas hay que tomar en cuenta las rutinas almacenadas son pedazos de código que pueden o no contener
código lenguaje del lenguaje SQL que se graban en el motor de base de datos y que en definitiva se crean
por un tema de seguridad y un tema de velocidad.
Por qué.
Primero porque son más rápidas al estar compiladas dentro del motor son más rápidas del motor las ejecuta
de una manera más rápida porque el motor no hace un chequeo sintaxis en el momento de ejecución.
Si hace un chequeo de la sintaxis de que todo lo que nosotros escribamos en nuestra rutina almacenada
esté correcto y lo hace en el momento que la creamos.
Entonces por eso es muy importante porque en el momento de crearla si hay algo que está mal escrito
o algún error de sintaxis el motor se va a encargar de darnos un error en el momento no nos va a dejar
grabar nuestra rutina almacenada y además porque es importante porque mantiene nuestro código SQL todo
nuestro manejo de base de datos de manera ofuscada hacia la vista de los curiosos.
Cualquiera agarra nuestro código fuente de nuestro desarrollo en nuestro programa sean el lenguaje que
sea y no va a haber nada de la base de datos sólo va a haber un llamado a una rutina que adentro hace
muchas cosas pero no va a saber qué es lo que se hace.
Esto es muy importante porque imagínense que hay empresas muy importantes de seguridad empresas muy
importantes que mantienen información muy sensible que si no hicieran esto y si colocaran todas las
sentencias SQL en el código existe forma de compilar un programa un punto ExE hay software que compila
y cualquiera cualquier hacker puede ver el código y enterarse cómo acceder a nuestra base de datos.
Las conexiones de la base de datos los nombres de las tablas los nombres de los campos y de esta manera
podemos tener todo nuestro nuestra parte importante nuestro Kor nuestro Corde todo lo que hace y toda
la parte importante de nuestro código alejada de los curiosos ese es el motivo por los cuales los bancos
utilizan rutinas almacenadas.
Eso es básicamente por la cual las compañías de servicios y las compañías de seguros y prácticamente
casi todas las compañías grandes o medianas o cualquiera que quiera usarlos utilizan estor pocillos
y por eso es tan buscada la información de cómo trabajar con ellas.
Yo lo que he hecho he dividido esta sección que fue a pedido en tres clases.
Podría haber hecho todo en una sola clase pero los hubiera mareado porque a mí me gusta ir de lo simple
a lo difícil.
Vamos a ver algo simple y vamos a aprovechar esta clase que es simple para ver todos los detalles de
las rutinas almacenadas sobretodo de cómo crearlas.
Así cuando vamos a nuestro siguiente capítulo que nos habla de ya algo más complejo no tengo que volver
a explicar los parámetros o los ateos iniciales de una rutina almacenada.
Cómo creamos una rutina almacenada en nuestra base de datos.
Tenemos que ir a nuestra base de datos botón derecho.
Se acuerdan que íbamos a crear nuevos para crear una tabla.
Bueno vamos a crear rutina almacenada una rutina almacenada tiene estos parámetros estos cetáceos iniciales
que hay que colocar y vamos a verlos uno por uno.
El primero es el nombre.
Si ustedes se fijan aquí yo tengo tres rutinas almacenadas creadas que ustedes no tienen ahí en su base
de ejemplo.
Por ejemplo tengo una llamada borro alumno y cómo me doy cuenta de que es una rutina almacenada porque
el ícono.
Si ustedes se fijan es una diferencia un poco sutil pero Lex la diferencia está.
El ícono tiene una ruedita primero que no es el ícono de tabla sino que es como si fuera un papiro un
papel y con una ruedita de ejecución de 7-O y esas son rutinas almacenadas.
Ahora aquí tengo otra que ustedes ven que pareciera que fuera parecido pero no es lo mismo.
Tiene un color verde.
No sé si alcanza a verlo.
Tiene un color verde y esa es una función se resetean desde el mismo lugar se programan desde el mismo
lugar y el código más o menos parecido.
Pero ahora vamos a ver las diferencias y tengo una última rutina almacenada llamada máxima venta que
esa es una un procedimiento almacenado.
Ahora estas tres son las tres que vamos a ver en estos tres capítulos.
Las dividí en tres capítulos porque vamos a ver primero borro alumno que es la más simple.
Luego vamos a ver máxima venta que es la que sigue en complejidad y cuando lleguemos al último vamos
a ver ganancia ventas que es mucho más compleja completa y vamos a ver que en el código tiene incluido
de todo variables cursores condiciones bucles.
Vamos a ver todo y se los voy a explicar cada cosita así que no se desesperen vamos de a poco cuando
creo una rutina almacenada tengo tres solapas la primer solapas la solapa principal que me abre donde
voy a colocar un nombre de mi rutina.
Yo aquí había puesto en otra borro alumno aquí puede ser
actualizo alumno luego tiene un un campo llamado definidor que tiene que ver con la seguridad con quién
quién va a ser la persona o el usuario.
Mejor dicho la persona.
El usuario que va a tener acceso a esta sentencia esta rutina almacenada y me aparecen todos los usuarios
que tengo definidos y yo voy a tomar el perfil de Root o no si no hacen nada aquí va a tomar el que
viene por default de la base que es Root no tienen que preocuparse por esto salvo que estén manejando
ya seguridad compleja con mi ciclo.
Luego van a dejar o no un comentario explicando que hace la rutina almacenada.
Luego tienen el tipo y aquí es muy importante ver esto porque nosotros tenemos o que vamos a hacer una
rutina almacenada que aquí la llama procedimiento o vamos a crear una función la función devuelve un
resultado el procedimiento no devuelve un resultado aún usando procedimientos y yo dentro de mi rutina
coloco un simple Select.
Cuando la ejecutemos me va a devolver el resultado el Select.
Pero cuál es la diferencia.
La diferencia es que un procedimiento yo lo voy a poder ejecutar por fuera de una sentencia SELECT lo
voy a tener que ejecutar y una función.
En realidad la voy a tener que usar dentro de una sentencia SELECT se acuerdan que cuando vimos funciones
tenemos nuestra función Shum nuestra función min max a beraz o HGE tenemos la función Hilliard para
sacar el año de una fecha.
Bueno esto es lo mismo ustedes van a poder crear sus propias funciones sus propias funciones y esto
va a hacer que al crear sus propias funciones van a poder utilizar luego desde sus desarrollos o dentro
de otros procedimientos almacenados van a poder usar esas funciones y van a resolver mucho código con
eso y las funciones obviamente retornan un valor fijense una cosa aquí si yo elijo procedimiento en
el campo regresa como no va a devolver ningún valor está deshabilitado si yo voy a Función en regresa
voy a tener que elegir qué me va qué me va a regresar.
Por ejemplo la función Guillerme devuelve un entero la función Monks me devuelve un entero la función
a beraz me devuelve un decimal porque el haberá es el promedio puede ser que venga con decimales entonces
me devuelve una décima la función que ustedes creen que les va a devolver un entero un chat un parchar
un texto una fecha eso lo van a elegir ustedes en el momento de crearlas.
Bueno luego tenemos acceso a datos esto es para indicarle al motor si lo que estamos creando basta con
tener sentencias SQL para que lo tenga en cuenta para chequear su sintaxis si no tiene sentencias SQL
por ejemplo es una función que recibe los números enteros y lo que me devuelve es la multiplicación
de ambos.
Ahí no tiene nada que ver el lenguaje se cuele.
No voy a meter instrucciones SQL en mí esto es posible y luego hay una más compleja que dice que nuestra
función va a leer datos de SQL.
Para qué se usa esto para cuando yo en mi función use cursores.
Si ustedes luego vamos a explicar que son los cursores en el tercer capítulo ahora simplemente quédense
con estas definiciones porque si no se va a ser extremadamente largo este capítulo si ustedes en su
rutina almacenada de tipo función van de tipo función o procedimiento van a usar cursores esos cursores
necesitan un acceso a datos especial porque van a trabajar con tablas creadas en memoria y necesitan
que ustedes coloquen este tipo de acceso a datos si ustedes no van a manejar cursores dejan el primero
seleccionado el que viene por defecto.
Por qué esto.
Porque si ustedes meten cursores y lo único que dicen es que contiene sentencias SQL un cursor no maneja
sentencias SQL se crea en base a una sentencia SQL pero el manejo del cursor es diferente.
Entonces el motor cuando lo quieran grabar les va a dar error y luego le Finnair significa la seguridad
de SQL de que donde va a tomar los aspectos de seguridad si dejamos el deformaba asumir que el que definió
y el que está ejecutando nuestra rutina almacenada va a tener que tener permisos vieron que los hemos
creado.
En el capítulo de usuarios y seguridad bueno esa persona quien quiere ejecutar nuestra sentencia SQL
nuestra rutina almacenada perdón va a tener que tener los permisos definidos para crear o ejecutar sentencias
rutinas almacenadas.
Así que bueno esto es la primer solapa la solapa opciones determinista no se los voy a explicar rápidamente
determinista hico por default aparece destilado en el 99.99 por ciento de los casos lo van a tener destilado.
Es más yo les recomendaría que lo detengan siempre destilado y se usa cuando creamos un procedimiento
almacenado que siempre ejecuta lo mismo que siempre.
Por ejemplo siempre devuelve el mismo valor que siempre ejecuta el mismo código que no es variable que
no trae parámetros ni ejecuta sentencias SQL relacionadas con parámetros y que el valor siempre va a
ser diferente.
Entonces por qué el motor creó esto y aquí estoy explicando algo de muy bajo nivel.
Pero para qué de bajo nivel no porque sea malo sino porque estoy explicando algo cómo funciona el motor
en su interior para que ustedes lo entiendan y les quede grabado de por qué se creó esto cada vez que
un usuario se conecta a la base de datos y ejecuta una rutina almacenada el motor crea un espacio en
memoria para ejecutar esa rutina almacenada.
Entonces aparece el usuario Pedro ejecuta la rutina almacenada el motor determina un espacio en memoria
para Pedro cuando aparece Pablo y ejecuta la misma rutina almacenada.
El motor crea un nuevo espacio en memoria para Pablo.
Si tengo mil usuarios y los 1000 están concurrentes y los 1000 están ejecutando la misma rutina almacenada
el motor tiene que crear 1000 espacios en memoria para esos mil usuarios.
Ahora si yo ya sé que la rutina almacenada no va a ser diferente para ellos.
O sea cuando Pablo ejecute esa rutina va a traer el mismo valor al mismo resultado que para Pedro.
El motor mantiene mantienen memoria una sola copia de esa rutina almacenada y la ejecuta para todos
los usuarios.
Esto es muy peligroso si ustedes creen que tildándolo van a resolver temas de memoria y de performance.
Quizás sea así si hacen bien su rutina almacenada pero si no lo hacen bien el mismo motor va a devolver
cualquier cosa o va a tener una inconsistencia o va realmente a colgarse porque están queriendo hacer
cosas diferentes en un mismo espacio de memoria.
Si no son alumnos avanzados o expertos en programación o que ya tengan en claro este tipo de manejos
yo les pediría que no no tilde en esta opción y que la dejan la dejen destiladas.
Luego tenemos la solapa parãmetros nuestra rutina almacenada.
Lo bueno que tienen estos estos pedazos de código que vamos a crear es que permiten recibir parámetros
externos y en base a esos parámetros van a ejecutar y hacer cosas diferentes.
Si yo le pido que me borre el usuario número 4 va a recibir por parámetro el uso el Leydis número 4
y va a ir a borrarme el usuario 4 no me va a ir a borrar el usuario 5.
Ahora si yo la ejecuto nuevamente pero esta vez le digo ahora borrarme el usuario 5 va a hacer eso y
no va a hacer otra cosa.
Parece tonto lo que estoy explicando pero en el curso ya hay y esto es algo que me pone muy feliz.
Hace solo 48 horas que se publicó el curso al momento que estoy grabando esto y ya hay más de mil 200
usuarios registrados así que es mil ciento y pico no sé si superó los 1200 o mil 1333.
Así que bueno hay de todo hay chicos que están empezando y que por ahí esto es muy avanzado pero también
ahí hay colegas que están queriendo aprender más sobre esto y me lo han pedido no solo en el curso sino
en LinkedIn también vamos a ver cómo se agregan los parámetros vamos a agregar un parámetro por ejemplo
un mes yo por convención les pongo un guion bajo primero y aquí tenemos que definir el tipo de dato
que estamos recibiendo que estamos recibiendo una fecha un texto marchar.
No estamos recibiendo un mes que se pueda resolver con un Tini y eso es todo lo que nosotros tenemos
que saber que podemos manejar parámetros el código va a estar aquí en el cuerpo de la rutina comienza
con Veguín termina con él y luego todo esto que nosotros estamos sesteando aquí nos crea nuestro propio
código Ascri podemos extrapolar a nuestro desarrollo si tenemos que crear rutinas desde nuestra aplicación.
Vamos a ver el primer ejemplo que es el más simple y vamos a dar paso luego al próximo capítulo para
Bersa en el próximo capítulo no vamos a ver todo esto pues ya lo vimos y vamos directamente al código
y a explicar cosas que tienen que ver con el código.
Nosotros vamos a descartar esto que estuvimos viendo vamos a ir a nuestra rutina almacenada llamada
borro alumnos que es la primera que he creado que es muy tonta muy simple es muy nada o sea es una sola
línea de código aquí podría tener páginas y páginas de código se entiende muy bien ahora qué es lo que
hace esta esta rutina simplemente recibe un parámetro un Eiriz de alumno que lo tenemos aquí albúm aided
es una Molin es un es una paragüas na variable que entra es un parámetro de entrada no es un parámetro
de salida y lo que va a hacer es borrar la tabla alumnos cuando nosotros le indiquemos una idea de alumno.
Todo lo demás está testeado no es una función es un procedimiento fíjense que no me devuelve nada solamente
ejecuta y vamos a ver cómo ejecutar esto.
Y atención porque yo voy a ejecutar y van a ver que da un error pero no porque esté mal creado nuestra
rutina almacenada porque nosotros en la tabla alumnos le hemos creado a lo largo del curso una llave
foránea uniendo alumnos con materias se acuerdan cuando vimos Foreing Quip llaves foráneas.
Es por eso que ahora vamos a ver cómo funciona correctamente nuestra rutina almacenada porque si no
funcionara no me aparece ningún error o sea ahora lo normal es que me aparezca un error quiero borrar
un alumno que ojo es un alumno que tiene materias asociadas cómo se llama una rutina con el cual llamar
a qué rutina a Borrow alumno si nuestra rutina no tuviera parámetros igual tenemos que usar los paréntesis
y terminar con punto y coma.
Si nuestra rutina no tuviera parámetros se hace así como lo ven ahora.
Pero como tiene un parámetro yo voy a tener que indicar un número o una idea.
Voy a indicar el alumno número 4 que me borre el alumno número 4 cuando ejecuto me va a parecer error
claro por qué aparece Error.
Porque me habla de que tengo una Foreing que está unida a cursos a materias.
Entonces no puedo borrar.
Hay un error de integridad de seguridad.
Se entiende esto.
Nuestra rutina almacenada la primera de todas está funcionando de manera perfecta.
Ahora los invito al próximo capítulo y vamos a ver cómo esto va tomando mucho más forma y se va haciendo
mucho más consistente.
Nos vemos en el próximo capítulo.