1 00:00:00,000 --> 00:00:07,000 Hola chicos, este vídeo es para ilustrar el concepto de cursores implícitos, son aquellos 2 00:00:07,000 --> 00:00:11,760 que el programa ni abre ni cierra el cursor, se hace todo de forma implícita y únicamente 3 00:00:11,760 --> 00:00:16,820 valen para la orden insert, update y delete, a diferencia de los cursores implícitos que 4 00:00:16,820 --> 00:00:22,640 vimos anteriormente que eran para la orden select, estos solamente para estas tres órdenes. 5 00:00:22,640 --> 00:00:27,800 Vamos a ver un ejemplo, un bloque que ejecuta una orden insert, sin la orden update no encuentra 6 00:00:27,800 --> 00:00:33,800 la fila coincidente, vemos aquí begin, update, hacemos una actualización a la tabla rooms, 7 00:00:33,800 --> 00:00:37,560 le ponemos que el número de asientos o de pupitres sea 100, cuando el código de aula 8 00:00:37,560 --> 00:00:42,480 es este, supongamos que este código de aula no existe y este update va a fallar, en caso 9 00:00:42,480 --> 00:00:49,400 de que falle no se va a ir nunca al gestor de excepciones, si no tenemos controlado nada 10 00:00:49,400 --> 00:00:55,000 debajo pues no nos vamos a enterar que no ha hecho la actualización, lo lógico es 11 00:00:55,000 --> 00:01:02,720 poner debajo un cursor implícito, de la forma if sql tanto %not found y que haga un aviso 12 00:01:02,720 --> 00:01:07,680 o que inserte en una tabla temporal, lo que sea, en este caso inserta el código y el 13 00:01:07,680 --> 00:01:08,680 número 100. 14 00:01:08,680 --> 00:01:14,920 Vamos a ver otro ejemplo, este es el ejercicio 6 que tenéis en la lista de ejercicios, lo 15 00:01:14,920 --> 00:01:19,600 vamos a hacer y así ya queda corregido, codificar un procedimiento que permita borrar un empleado 16 00:01:19,600 --> 00:01:24,960 cuyo número se pasa en la llamada, el procedimiento se llama borrar empleado y recibe un parámetro, 17 00:01:24,960 --> 00:01:32,640 lo que hace es borrar de la tabla empleados el código del empleado cuyo código es igual 18 00:01:32,640 --> 00:01:38,080 al que nos pasan por parámetro, supongamos que nos pasan un código que no existe, entonces 19 00:01:38,080 --> 00:01:42,720 ocurre lo mismo que con el update anterior, si este delete falla, no se va al gestor de 20 00:01:42,720 --> 00:01:47,400 excepciones, simplemente no borra el empleado y no nos enteramos de que ha fallado, el programa 21 00:01:47,400 --> 00:01:55,720 continuaría, entonces lo suyo es poner debajo un cursor implícito de este tipo, en el caso 22 00:01:55,720 --> 00:02:01,400 de que el delete falle, se irá a este if que se cuele tanto %not found y nos sacará 23 00:02:01,400 --> 00:02:06,520 este mensajito por pantalla, no existe el empleado. 24 00:02:06,520 --> 00:02:13,400 Vamos a ver otro ejemplo, este caso es para ilustrar que no es conveniente emplear se 25 00:02:13,400 --> 00:02:18,920 cuele %not found en órdenes select into, como ya os he dicho, los cursores implícitos 26 00:02:18,920 --> 00:02:22,920 solo valen para órdenes insert, update o delete, cuando un select into falla siempre 27 00:02:22,920 --> 00:02:27,800 se va a ir al gestor de excepciones, si aquí hacemos este select asterisco into una variable 28 00:02:27,800 --> 00:02:32,240 de la tabla rooms cuando el código del aula es el menos uno que probablemente no exista, 29 00:02:32,240 --> 00:02:35,080 pues va a fallar y se va a ir al gestor de excepciones y nunca va a hacer lo que esté 30 00:02:35,080 --> 00:02:39,400 por debajo, lo que quiere decir que este cursor implícito no se va a ejecutar nunca, se irá 31 00:02:39,400 --> 00:02:43,240 al gestor de excepciones, si la excepción está controlada, en este caso sí porque 32 00:02:43,240 --> 00:02:51,160 hay un %not found en el gestor, entonces insertará en la tabla temporal y estamos en la excepción, 33 00:02:51,160 --> 00:02:54,680 pero nunca va a ejecutar el cursor implícito. 34 00:02:54,680 --> 00:02:57,800 Con esto ya queda finalizado el tema de cursores implícitos.