1 00:00:00,000 --> 00:00:04,519 Bueno, vamos a empezar a ver lo que son los cursores. 2 00:00:05,500 --> 00:00:10,279 Es posiblemente una de las partes más importantes cuando estamos programando en base de datos. 3 00:00:11,380 --> 00:00:18,359 Un cursor lo podemos ver como el conjunto, la colección de registros que obtenemos de una búsqueda select. 4 00:00:19,920 --> 00:00:25,079 Después, para recuperar cada uno de ellos, concretamente estar posicionado solamente en uno de ellos, 5 00:00:25,719 --> 00:00:29,000 realizaremos lo que se llama esto, la palabra fetch. 6 00:00:29,000 --> 00:00:32,780 con lo cual el cursor es como que abro esa búsqueda 7 00:00:32,780 --> 00:00:36,719 y me voy con el fetch posicionando en cada uno de los registros 8 00:00:36,719 --> 00:00:38,420 vamos a verlo con un ejemplo 9 00:00:38,420 --> 00:00:41,420 este es un ejemplo un poco complejo 10 00:00:41,420 --> 00:00:44,299 porque realmente los cursores son complejos 11 00:00:44,299 --> 00:00:47,420 bueno, en primer lugar voy a borrar todo lo que hubiera 12 00:00:47,420 --> 00:00:48,859 para poder trabajar en limpio 13 00:00:48,859 --> 00:00:49,820 y voy a crear una tabla 14 00:00:49,820 --> 00:00:52,420 voy a crear esta tabla, la tabla T1 15 00:00:52,420 --> 00:00:54,079 que tiene dos campitos 16 00:00:54,079 --> 00:00:56,240 A que es un entero 17 00:00:56,240 --> 00:00:58,560 y B que son tres caracteres 18 00:00:58,560 --> 00:01:02,179 Y voy a insertar estos valores, del 1 al 5 con out. 19 00:01:02,560 --> 00:01:02,960 ¿De acuerdo? 20 00:01:03,560 --> 00:01:06,379 Esto es simplemente para tener los datos para poder jugar con ellos. 21 00:01:07,500 --> 00:01:11,519 Bueno, me voy a lo que es el código realmente del procedimiento P1. 22 00:01:13,040 --> 00:01:16,000 P1 tiene dos parámetros de entrada, mínimo y máximo. 23 00:01:16,959 --> 00:01:19,280 Y hemos declarado varias cosas. 24 00:01:19,680 --> 00:01:23,439 Primero una variable fin, que ya vemos que aparece en varios sitios. 25 00:01:24,120 --> 00:01:26,420 Ahora veremos qué hace y que inicialmente vale falso. 26 00:01:26,420 --> 00:01:30,819 Una variable VA, que es de valor tipo entero 27 00:01:30,819 --> 00:01:34,219 Un cursor, que ahora veremos lo que es 28 00:01:34,219 --> 00:01:38,319 Y un manejador, que también lo veremos 29 00:01:38,319 --> 00:01:43,159 Están en este orden, porque si se acuerdan, ya en vídeos anteriores vimos que tenían que tener un orden determinado 30 00:01:43,159 --> 00:01:47,519 Bueno, ¿qué es lo que hacemos aquí en el proceso este? 31 00:01:47,519 --> 00:01:54,459 Abrimos nuestro cursor y le pasamos, como tiene dos parámetros, el valor mínimo y el valor máximo 32 00:01:54,459 --> 00:02:08,020 Muy bien. Ahora vamos a hacer un bucle. En este bucle vamos a ir recogiendo cada registro asociado al cursor y vamos a guardar esa información en esta variable. 33 00:02:09,219 --> 00:02:14,580 Si llegamos al final, no salimos del bucle, ¿de acuerdo? No salimos de este bucle. 34 00:02:16,280 --> 00:02:22,919 Si no, pues lo que hacemos cada vez que eso es insertar un registro nuevo con los valores va y new. 35 00:02:22,919 --> 00:02:25,240 y cuando ya hemos salido del bucle 36 00:02:25,240 --> 00:02:26,719 cerramos nuestro cursor 37 00:02:26,719 --> 00:02:29,180 ¿cómo cambia este valor fin? 38 00:02:29,300 --> 00:02:30,919 porque aquí dentro no vemos que cambia nada 39 00:02:30,919 --> 00:02:33,740 pues el fin cambia a través del manejador 40 00:02:33,740 --> 00:02:34,360 que dice 41 00:02:34,360 --> 00:02:37,500 vamos a declarar que el manejador 42 00:02:37,500 --> 00:02:38,979 que continúa 43 00:02:38,979 --> 00:02:42,039 nuestro paso por todos los registros 44 00:02:42,039 --> 00:02:42,520 del cursor 45 00:02:42,520 --> 00:02:45,139 cuando llegue a no fauna que no haya 46 00:02:45,139 --> 00:02:47,460 encuentra más, establezca que 47 00:02:47,460 --> 00:02:48,620 fin vale true 48 00:02:48,620 --> 00:02:51,300 es decir, fin al principio vale false 49 00:02:51,300 --> 00:02:53,580 cuando llega al final, fin valetro 50 00:02:53,580 --> 00:02:55,520 con lo cual, este variable aquí 51 00:02:55,520 --> 00:02:56,939 va a cambiar, ¿de acuerdo? 52 00:02:57,219 --> 00:02:59,620 ahí vemos los tres fin iluminados 53 00:02:59,620 --> 00:03:03,439 ¿qué hace nuestro cursor? pues declaramos un cursor 54 00:03:03,439 --> 00:03:04,439 que es tan simple 55 00:03:04,439 --> 00:03:06,979 declara este cursor para 56 00:03:06,979 --> 00:03:09,560 la sentencia select from 57 00:03:09,560 --> 00:03:11,379 where, seleccioname 58 00:03:11,379 --> 00:03:13,020 el campo A 59 00:03:13,020 --> 00:03:14,280 el primer campo 60 00:03:14,280 --> 00:03:16,800 de la tabla T1, donde A 61 00:03:16,800 --> 00:03:19,199 esté entre este valor y este valor 62 00:03:19,199 --> 00:03:21,120 ¿vale? con lo cual 63 00:03:21,120 --> 00:03:33,099 Bueno, pues aquí cuando abrimos el curso realmente es como si ejecutáramos esa sentencia y vamos con el FEDS a ir primero a la primera, después a la segundo registro, después al tercer registro y así sucesivamente. 64 00:03:34,020 --> 00:03:42,379 Bueno, vamos a verlo funcionar. Voy a copiarme, voy a copiarme toda esta información y me la voy a llevar a nuestro MariaDB. 65 00:03:42,939 --> 00:03:50,039 Le voy a dar aquí y efectivamente nos ha generado todo esto. Vamos a subir un poquito para ver todo lo que nos ha hecho. 66 00:03:50,039 --> 00:03:56,060 Hemos borrado algo si existía, hemos creado nuestra tabla, hemos insertado nuestras 5 filas 67 00:03:56,060 --> 00:03:59,419 Y ya por fin tenemos nuestro código introducido 68 00:03:59,419 --> 00:04:04,020 Bueno, pues vamos a ejecutar este procedimiento 69 00:04:04,020 --> 00:04:08,460 Sabemos lo que tenemos en nuestra tabla T1 70 00:04:08,460 --> 00:04:14,400 Así que vamos a ejecutar P1, por ejemplo, entre el 2 y el 4 71 00:04:14,400 --> 00:04:19,879 Sabemos, porque lo hemos visto aquí, que tenemos valores entre el 1 y el 5 con old 72 00:04:19,879 --> 00:04:39,040 Entonces vamos a recorrer del 2 al 4. 2, 3, 4. Vamos a darle. Y dice que ha afectado 3 filas. Vamos a ver ahora cómo, cuánto vale la información de nuestra tabla T1, que es la que ha sido afectada. 73 00:04:39,040 --> 00:04:42,660 y efectivamente el recorrió del 2 al 4 74 00:04:42,660 --> 00:04:45,620 hizo un SELECT de estos tres registros de aquí 75 00:04:45,620 --> 00:04:48,819 y como era un SELECT A 76 00:04:48,819 --> 00:04:51,839 pues fue pasando el valor 2 a VA 77 00:04:51,839 --> 00:04:54,699 con eso construyó este registro de aquí 78 00:04:54,699 --> 00:04:56,160 VA, NEW 79 00:04:56,160 --> 00:04:59,500 después pasó al 3, VA, NEW 80 00:04:59,500 --> 00:05:01,839 después pasó al 4, VA, NEW 81 00:05:01,839 --> 00:05:05,000 y cuando acabó, FIN se puso a TRUE 82 00:05:05,000 --> 00:05:08,199 y se salió del bucle y cerró el cursor 83 00:05:08,199 --> 00:05:10,220 y finalizó el procedimiento 84 00:05:10,220 --> 00:05:12,779 espero que les haya aclarado 85 00:05:12,779 --> 00:05:14,620 bastante como funciona 86 00:05:14,620 --> 00:05:16,959 como funcionan los cursores 87 00:05:16,959 --> 00:05:18,819 el procedimiento casi siempre 88 00:05:18,819 --> 00:05:20,899 es igual, por supuesto puede haber 89 00:05:20,899 --> 00:05:22,660 cursores uno dentro de otro 90 00:05:22,660 --> 00:05:24,639 pueden estar aquí metidos 91 00:05:24,639 --> 00:05:26,019 dentro de un cursor otro 92 00:05:26,019 --> 00:05:29,040 que a veces no va a venir bien en algún tipo de programación 93 00:05:29,040 --> 00:05:30,019 más compleja