1
00:00:03,820 --> 00:00:04,480
Hola qué tal.

2
00:00:04,480 --> 00:00:12,010
Bienvenidos a este último capítulo de la sección de estor prosigue rutinas almacenadas y vamos a ver

3
00:00:12,010 --> 00:00:20,890
ahora algo bastante complejo bastante nutritivo vamos a ir a nuestra rutina que tenemos grabada que

4
00:00:20,890 --> 00:00:29,200
se llama ganancia ventas vamos a hacerle click no vamos a grabar esta vamos a ver si podemos achicar

5
00:00:29,200 --> 00:00:32,820
algún espacio.

6
00:00:32,820 --> 00:00:38,680
Bueno no importa vamos a estropear SI NO SE NO NOS VAMOS DE PANTALLA.

7
00:00:38,680 --> 00:00:41,070
Bueno qué es lo que vamos a hacer aquí.

8
00:00:41,290 --> 00:00:50,290
Nosotros vamos a usar cursores los cursores son tablas en memoria que crea el motor no son tablas reales

9
00:00:50,290 --> 00:00:57,760
no son tablas que las va a grabar ni les va a dar un nombre son tablas en memoria que nos va a permitir

10
00:00:57,820 --> 00:01:07,880
recorrer sus registros y procesar sus datos esas tablas son creadas en base a una sentencia SQL que

11
00:01:07,880 --> 00:01:16,010
nosotros ejecutamos inclusive como van a ver en este ejercicio uniendo tablas con condiciones y parámetros

12
00:01:16,010 --> 00:01:17,120
y demás.

13
00:01:17,330 --> 00:01:24,440
Y una vez que tenemos nuestra instrucción Céret con el resultado eso lo vamos a grabar en un cursor

14
00:01:25,370 --> 00:01:32,720
el sentido de esto es poder ir recorriendo el registro por registro capturando valores del cursor y

15
00:01:32,720 --> 00:01:40,820
en base a eso vamos a poder hacer operaciones comparaciones y vamos a poder hacer procesos especiales

16
00:01:41,450 --> 00:01:49,160
es muy difícil encontrar un ejemplo que nos permita defender el tema de los cursores porque todos hasta

17
00:01:49,160 --> 00:01:56,740
ahora todo lo que hemos visto lo podemos hacer simplemente con una sentencia SQL pero es importante

18
00:01:56,770 --> 00:02:04,090
que ustedes aprendan el tema de los cursores porque es algo muy usado en el mundo profesional con el

19
00:02:04,090 --> 00:02:12,280
tema de las rutinas almacenadas y y esto es algo que les va a dar mucho más libertad para el manejo

20
00:02:12,280 --> 00:02:13,430
de los datos.

21
00:02:13,600 --> 00:02:14,770
Qué es lo que vamos a hacer aquí.

22
00:02:14,770 --> 00:02:27,400
Nosotros vamos a recorrer nuestro cursor y vamos a sumar la ganancia que tuvimos vendiendo productos

23
00:02:27,820 --> 00:02:30,550
en nuestra tabla ventas detalle.

24
00:02:30,550 --> 00:02:36,340
Recuerden que en ventas detalle yo tengo los items de nuestra factura de nuestros productos vendidos

25
00:02:36,570 --> 00:02:43,870
que tengo un campo precio que tengo un campo costo y que luego tengo un campo cantidad que me va a permitir

26
00:02:43,870 --> 00:02:51,520
con estos tres valores saber cuál es la ganancia que tuve la ganancia es la resta del precio de venta

27
00:02:51,610 --> 00:02:57,520
con el costo esa es la utilidad que he tenido de cada unidad.

28
00:02:57,520 --> 00:03:02,980
Luego lo tendré que multiplicar por la cantidad para saber la ganancia real de ese item de esa factura

29
00:03:03,510 --> 00:03:12,130
y todo eso lo vamos a ir acumulando en una variable que se llama ganancias donde vamos a poder dar un

30
00:03:12,130 --> 00:03:17,600
número final al finalizar la rutina almacenada.

31
00:03:17,680 --> 00:03:22,800
Vamos a poder devolver una rutina de un valor final.

32
00:03:22,840 --> 00:03:27,640
Cuáles son las características de esta rutina almacenada.

33
00:03:27,640 --> 00:03:28,960
Qué hemos hecho aquí.

34
00:03:29,050 --> 00:03:31,570
Por empezar es una función.

35
00:03:31,780 --> 00:03:38,890
Aquí ya estamos usando una función que va a devolver un valor decimal de diez coma dos.

36
00:03:38,890 --> 00:03:45,760
Recuerden que cuando usábamos funciones y cursores específicamente yo les dije que tenían que elegir

37
00:03:46,150 --> 00:03:54,130
esta opción si yo elijo la primera y lo quiero grabar me va a dar un error porque no es tan exacto no

38
00:03:54,130 --> 00:04:03,340
es que solamente dentro de mi rutina voy a encontrar sentencias SQL sino que voy a tener que usar lectura

39
00:04:03,340 --> 00:04:10,190
de datos y también sentencia SQL eso es lo que nos dice este acceso a datos.

40
00:04:10,560 --> 00:04:18,990
Luego tenemos parámetros sin ningún tipo de sorpresa en esto pero vamos a saber cómo funciona y como

41
00:04:18,990 --> 00:04:30,270
hemos declarado todo en primer lugar tenemos una variable llamada ganancia tenemos tres variables más

42
00:04:30,900 --> 00:04:39,930
precio cantidad y costo que por qué no les puse precio y por qué usé el bajo si no son parámetros bueno

43
00:04:40,290 --> 00:04:41,560
en este caso lo usé.

44
00:04:41,560 --> 00:04:43,150
Por qué.

45
00:04:43,530 --> 00:04:49,450
Para hacer de alguna forma una convención para no repetir nombre.

46
00:04:49,460 --> 00:04:58,310
Si bien aquí el nombre real es Bede guión bajo y para darle alguna similitud a el nombre del campo.

47
00:04:58,440 --> 00:05:00,630
Por eso le puse el guion bajo.

48
00:05:00,630 --> 00:05:06,900
Esto es indistinto a ustedes se lo pueden quitar pueden colocar el nombre que ustedes quieran aquí y

49
00:05:06,960 --> 00:05:11,430
yo luego le he puesto los tipos de datos medio.

50
00:05:11,460 --> 00:05:13,630
Fíjense que no tiene longitud.

51
00:05:13,710 --> 00:05:24,470
Ya el motor sabe cuanto aloja un video NiMH y luego tenemos un una variable que la uso como manejador

52
00:05:24,710 --> 00:05:32,840
van a ver ahora cuando veamos nuestro manejador de error que es una variable llamada final que la voy

53
00:05:32,840 --> 00:05:40,070
a definir con un valor de follen cero esto es lo mismo que colocar un set final igual cero pero quise

54
00:05:40,070 --> 00:05:43,760
hacerlo de esta manera para que vean las distintas variantes.

55
00:05:44,120 --> 00:05:49,820
Luego inmediatamente nuestras variables yo declaro Fíjense que aquí no coloco ningún set yo ya no empiezo

56
00:05:49,820 --> 00:05:54,790
a trabajar con ellas tengo que hacer primero todas las declaraciones.

57
00:05:55,280 --> 00:06:02,720
Luego aquí hago la declaración del cursor que se usa el mismo declare el nombre del cursor yo le he

58
00:06:02,720 --> 00:06:10,580
puesto una soy un ave corta que es cursor de ventas la palabra reservada cursor la palabra reservada

59
00:06:10,580 --> 00:06:13,030
for o sea va a ser un cursor.

60
00:06:13,280 --> 00:06:21,170
De qué iba a ser un cursor de este resultado y ahí inmediatamente fíjense que el punto y coma está recién

61
00:06:21,170 --> 00:06:23,060
al finalizar la sentencia SELECT.

62
00:06:23,060 --> 00:06:31,580
Todo esto es un solo bloque que lo puse así para que lo puedan ver pero podría estar todo en una línea

63
00:06:31,730 --> 00:06:39,920
completamente larga y que no iba a ser incómoda de ver pero lo coloqué así porque en definitiva al motor

64
00:06:39,920 --> 00:06:44,810
lo que le interesa es encontrar el punto y coma cuando encontró el punto y coma sabe que ahí terminó

65
00:06:44,810 --> 00:06:48,680
todo lo puedo le puedo dejar espacios inclusive no hay problema.

66
00:06:49,520 --> 00:06:54,710
Entonces qué es lo que va a hacer esta sentencia sé que me va a traer estos tres campos de mi tabla

67
00:06:54,710 --> 00:07:03,200
ventas detalle en mitad de la venta detalles y además cómo me va a permitir obtener la ganancia por

68
00:07:03,200 --> 00:07:04,560
año y por mes.

69
00:07:04,820 --> 00:07:11,200
Yo voy a tener que soy in-ear mitad habla tabla ventas detalles a la tabla ventas.

70
00:07:11,210 --> 00:07:17,360
Aquí hemos puesto hasta aquí no hay misterio porque esto lo han visto como un ir tablas uniendo mis

71
00:07:17,360 --> 00:07:18,880
dos campos clave.

72
00:07:18,950 --> 00:07:29,510
Luego tengo mi mi cláusula Wear donde solamente voy a traer los artículos los items vendidos que tengan

73
00:07:29,510 --> 00:07:33,860
costos y no me va a dar una ganancia mentirosa.

74
00:07:34,010 --> 00:07:40,700
Hay muchos registros en la tabla en la tabla ventas detalles que van a ver si ustedes lo tienen al alcance

75
00:07:40,700 --> 00:07:43,930
de sus manos el se huele y lo van a poder corroborar.

76
00:07:45,050 --> 00:07:46,620
Que tienen el costo en cero.

77
00:07:46,690 --> 00:07:54,430
Esos registros yo no los voy a tomar en cuenta porque cuando reste el precio de venta a ese costo me

78
00:07:54,430 --> 00:07:58,080
va a dar como que la ganancia fue el precio de venta y es mentiroso.

79
00:07:59,270 --> 00:08:07,670
Luego lo que tengo es el weak que solamente me traiga la factura que el año coincida con el parámetro

80
00:08:07,670 --> 00:08:15,240
año que yo se lo voy a pasar por parametro y lo mismo con el mes que el mes de venta fechas se igual

81
00:08:15,240 --> 00:08:17,510
al parámetro del mes.

82
00:08:17,510 --> 00:08:21,800
Esto lo va a ejecutar si yo aquí no tuviera el cursor.

83
00:08:21,800 --> 00:08:29,660
Si esta sentencia estas cuatro palabras no existieran lo que haces me muestra esto por pantalla me tira

84
00:08:29,660 --> 00:08:39,190
esto por pantalla pero lo que va a hacer aquí es grabar todo esto en un cursor en una tabla en memoria.

85
00:08:39,490 --> 00:08:48,860
Luego lo que tenemos es un manejador de fin de archivo aquí se maneja de esta manera para not found

86
00:08:48,860 --> 00:08:54,820
o sea cuando quiero moverme en un registro quiero avanzar en el cursor y descubrió el fin de archivo

87
00:08:55,180 --> 00:09:02,110
me va a entrar por not found y lo que hace en lugar de mostrarme un mensaje como en los ejercicios anteriores

88
00:09:02,320 --> 00:09:10,970
le va a grabar le va a sestear fíjense que hay un set le va a sestear un 1 a la variable final que por

89
00:09:10,970 --> 00:09:16,910
default viene en cero si tiene 1 1 significa que terminó ya está no tiene que seguir leyendo.

90
00:09:18,140 --> 00:09:23,970
Vamos a aceptar nuestra ganancia que es el valor que nos interesa y que vamos a retornar va sestear

91
00:09:23,980 --> 00:09:25,540
nuestra ganancia en cero.

92
00:09:26,550 --> 00:09:33,380
Inmediatamente lo que hace es abrir el cursor yo no puedo trabajar con el cursor si no lo abro porque

93
00:09:33,380 --> 00:09:39,290
ya lo creó ya grabó los datos pero ahora le tengo que decir bueno ahora abrirlo que lo voy a recorrer

94
00:09:39,890 --> 00:09:43,430
y cuando terminé de recorrerlo es fundamental cerrarlo.

95
00:09:43,430 --> 00:09:51,920
Si yo veo alguna de estas instrucciones el motor me va a dar error muy bien en el medio.

96
00:09:52,160 --> 00:09:53,600
Entre que lo abro y lo cierro.

97
00:09:53,600 --> 00:09:54,700
Voy a procesarlo.

98
00:09:54,710 --> 00:09:58,040
Y cómo lo processo voy a ejecutar.

99
00:09:58,040 --> 00:09:59,610
Voy a hacer un dúo.

100
00:09:59,630 --> 00:10:06,680
Esta es una estructura de bucle de repetición hasta que se cumple una condición y la condición cual

101
00:10:06,680 --> 00:10:06,940
es.

102
00:10:06,950 --> 00:10:13,870
Yo voy a ejecutar mientras afinarse a cero recuerden que cuando encuentra fin de archivo el final del

103
00:10:13,870 --> 00:10:16,390
cursor le va a mover un 1.

104
00:10:16,660 --> 00:10:21,810
Voy a ejecutar esto mientras sea cero y voy a usar la instrucción fets.

105
00:10:22,030 --> 00:10:30,160
La instrucción Fetch es la instrucción que me lee el próximo registro del curso cuando yo abro el cursor

106
00:10:30,430 --> 00:10:31,170
el cursor.

107
00:10:31,180 --> 00:10:38,170
Cuando el Open el cursor se posiciona en ningún registro yo no puedo abrir y después querer manipular

108
00:10:38,170 --> 00:10:39,730
los datos del cursor.

109
00:10:39,850 --> 00:10:46,920
No tengo que usar una instrucción fetch y es la que me va a posicionar en el próximo registro del curso

110
00:10:47,500 --> 00:10:54,910
y qué es lo que hace Fetch el nombre del cursor y lo que lea lo tiene que grabar en las variables.

111
00:10:54,910 --> 00:11:01,460
Si el cursor de acuerdo a la sentencia se cuele trae sólo tres campos.

112
00:11:01,720 --> 00:11:06,260
Cuando yo lea el registro lo tengo que grabar en tres variables diferentes.

113
00:11:06,460 --> 00:11:12,870
Si mi cursor solamente si mi instrucción se lee solamente trajera un valor voy a usar una variable.

114
00:11:13,060 --> 00:11:20,410
Aquí tiene que haber concordancia y tengo que crear una variable por cada campo que traigo en la instrucción

115
00:11:20,410 --> 00:11:27,640
Cele precio cantidad y costo precio cantidad y costo precio cantidad y costo.

116
00:11:27,670 --> 00:11:38,790
Entonces leí el registro y le dije grava los valores grava los valores en las variables y es importante

117
00:11:38,790 --> 00:11:47,520
esto no puedo cambiar el orden porque el motor no sabe que el primer valor es un precio el primero valor

118
00:11:47,520 --> 00:11:54,750
lo va a grabar en la variable precio lo que yo le diga acá si el caso coloco costo no va a ir a buscarme

119
00:11:54,810 --> 00:12:02,010
la columna costo no va a gravar el primer valor encontrado la primer columna y me la va a gravar en

120
00:12:02,010 --> 00:12:08,220
costo y me va a dar un error error no me va a dar error me va a dar una información inconsistente mal

121
00:12:08,610 --> 00:12:09,840
va a estar mal.

122
00:12:09,840 --> 00:12:16,680
Esto lo tengo que respetar el mismo orden de los campos que usé en la sentencia SELECT para crear el

123
00:12:16,680 --> 00:12:23,220
cursor tiene que ser el mismo orden de salida de los registros del cursor.

124
00:12:23,220 --> 00:12:25,830
Tengo que gravar las variables en el mismo orden.

125
00:12:26,040 --> 00:12:35,910
Muy bien ahora esta instrucción es una operación de imputado pues es una operación de lectura del cursor

126
00:12:36,020 --> 00:12:42,410
puede haber arrojado un error qué error el de ya no hay más registros no me pediste que lea el próximo

127
00:12:42,410 --> 00:12:43,440
y no hay más.

128
00:12:43,490 --> 00:12:52,280
Eso va a disparar el Handler y le va a sestear uno a la variable final entonces yo inmediatamente después

129
00:12:52,280 --> 00:12:59,330
de haber hecho la lectura del cursor lo que tengo que hacer es preguntar por la variable final porque

130
00:12:59,330 --> 00:13:07,690
si no no puedo hacer operaciones matemáticas en un registro que me trajo nulo me va a dar error voy

131
00:13:07,690 --> 00:13:09,460
a estar haciendo mal las cosas.

132
00:13:09,460 --> 00:13:16,510
Entonces inmediatamente después de mi operación de cursor tengo que preguntar por el estado de esa operación

133
00:13:16,960 --> 00:13:19,930
arrojó cero o arrojó uno.

134
00:13:19,930 --> 00:13:25,390
En realidad no va a arrojar cero cero ya es el valor que trae la variable por default solamente va a

135
00:13:25,390 --> 00:13:27,160
cambiar el valor si detecta un error.

136
00:13:27,160 --> 00:13:34,750
Entonces el valor de la variable es cero significa que no encontró un fin de archivo y voy a poder procesar

137
00:13:34,750 --> 00:13:36,640
esas variables.

138
00:13:36,970 --> 00:13:38,190
Qué es lo que voy a hacer.

139
00:13:38,260 --> 00:13:43,960
Voy a aceptar mi variable ganancia y le voy a decir que ganancia es igual a lo que ya tiene acumulado

140
00:13:43,960 --> 00:13:51,700
ganancia más y en doble paréntesis voy a tener que restar el precio al costo eso me va a dar la utilidad

141
00:13:52,180 --> 00:13:54,780
y el resultado lo voy a multiplicar por la cantidad.

142
00:13:54,790 --> 00:14:02,770
Por eso hay un doble paréntesis primero ejecutar esto me va a dar una utilidad y al resultado.

143
00:14:02,770 --> 00:14:09,880
En otro orden de paréntesis lo va a multiplicar por la cantidad y me va a dar la ganancia de ese ítem

144
00:14:09,880 --> 00:14:13,460
de ese renglón de mi base de datos.

145
00:14:13,480 --> 00:14:17,750
Entonces todo esto lo va a alojar y lo va a acumular en una variable ganancias.

146
00:14:17,770 --> 00:14:27,260
Esto va a iterar hasta que al final sea igual a uno cuando cuando llega aquí vuelve arriba dice final

147
00:14:27,270 --> 00:14:35,440
es igual a cero no es igual a uno entonces va a caer a la siguiente instrucción luego del enjuague se

148
00:14:35,440 --> 00:14:36,220
entiende esto.

149
00:14:36,220 --> 00:14:44,590
Esta es una estructura ya muy óptima de cómo manejarnos con los cursores Leo hasta que encuentro un

150
00:14:44,590 --> 00:14:49,200
final y cómo encuentro un final y manejando errores la única manera.

151
00:14:49,210 --> 00:14:53,330
No hay un no hay una instrucción no hay un cebé punto.

152
00:14:53,350 --> 00:15:03,050
En fin como ocurren en otros lenguajes entonces esto es manejo de cursor o inmediatamente cuando ya

153
00:15:03,050 --> 00:15:11,470
terminamos cerramos el cursor y retornamos el valor de ganancia al ser función la tenemos que retornar.

154
00:15:11,570 --> 00:15:20,570
Es un retorno del valor que vengo acumulando de ganancia muy bien esta es aquí hemos tenido de todo

155
00:15:20,570 --> 00:15:29,210
cursores variables hemos tenido estructuras de Lop de decisión hemos tenido comandos nuevos para el

156
00:15:29,210 --> 00:15:39,150
manejo de cursor y hemos tenido una rutina almacenada de tipo función que vamos a ver ahora cómo funciona

157
00:15:40,260 --> 00:15:41,920
valga la redundancia.

158
00:15:41,920 --> 00:15:51,240
Bueno si voy a mi solapa de consultas yo no puedo colocar aquí van a ver que no se puede no puedo colocar

159
00:15:51,240 --> 00:15:53,250
aquí ganancia ventas

160
00:15:56,250 --> 00:16:06,630
y pasarle el sello 2018 año mes 5 de parametro me va a dar un error porque no me va a decir que el procedimiento

161
00:16:07,530 --> 00:16:14,880
no existe porque realmente no existe pero si existe como una función y las funciones tienen un tratamiento

162
00:16:14,880 --> 00:16:15,610
diferente.

163
00:16:15,630 --> 00:16:19,970
Las funciones sólo pueden ser usadas desde una sentencia.

164
00:16:20,290 --> 00:16:31,230
Entonces yo aquí voy a tener que reemplazar el alcohol por un Cele ejecutamos y me dice que la ganancia

165
00:16:31,230 --> 00:16:39,780
total del año 2018 de mayo ha sido 228 1009 71 Bown 78.

166
00:16:40,550 --> 00:16:51,720
Y si yo vuelvo a ejecutar esto pero le pongo junio me da 258 583 komas 73 fíjense lo rápido que lo ha

167
00:16:51,720 --> 00:17:00,840
hecho es impresionante equipo colocó enero a ver si me da un número bastante diferente y me da 773 77

168
00:17:00,840 --> 00:17:12,390
con 62 y esto yo puedo meterlo ya que tengo una instrucción sé le puedo decir que esto se llame ganancia

169
00:17:12,630 --> 00:17:23,490
y además que me traiga y además que me traiga ventas fecha fueron ventas

170
00:17:28,740 --> 00:17:33,960
me va a dar cualquier cosa estoy haciendo cualquier cosa lo que yo quiero mostrarles a ustedes y va

171
00:17:33,960 --> 00:17:42,260
a demorar muchísimo por lo que veo lo que yo quiero mostrarles a ustedes es que ustedes pueden mezclar

172
00:17:42,260 --> 00:17:48,520
funciones con Campos y uniones de tablas y condiciones Goear y demás.

173
00:17:48,520 --> 00:17:50,840
Por qué está tardando ahora.

174
00:17:50,870 --> 00:17:57,520
Por qué por cada factura que encuentra por cada factura que encuentra mi tabla ventas está ejecutando

175
00:17:57,520 --> 00:17:59,960
esto se entiende a.

176
00:17:59,990 --> 00:18:08,720
Esto no lo van a hacer esto las funciones la van a usar y no para precisamente mezclar con sentencias.

177
00:18:08,770 --> 00:18:16,370
Cuando en mi función lo que hago es obtener un total que es el recorrido de una de una tabla esto no

178
00:18:16,370 --> 00:18:22,490
se puede estar minutos y minutos corriendo así que lo vamos a detener.

179
00:18:24,420 --> 00:18:32,020
Esto es lo mismo que en meter aquí un Shum por ejemplo es lo mismo ustedes van a poder usar esto como

180
00:18:32,020 --> 00:18:38,350
una función suya de mi círculo y lo van a enriquecer el lenguaje ustedes van a poder crear sus propias

181
00:18:38,560 --> 00:18:42,450
funciones no les alcanza con las que ya trae el motor.

182
00:18:42,550 --> 00:18:48,250
Van a crear sus propias funciones porque ustedes tienen un tratamiento diferente de lo que tienen que

183
00:18:48,250 --> 00:18:55,240
ser el procesamiento de los datos y de las tablas y les va a permitir crear funciones.

184
00:18:55,240 --> 00:19:02,290
Esta es la última clase y esta es la explicación final de lo que son los estor presidios.

185
00:19:02,440 --> 00:19:06,510
Por supuesto existe mucho más existen muchas más cosas.

186
00:19:06,610 --> 00:19:13,540
No vamos a andar más en este curso acerca de esto al menos no por ahora por una cuestión de tiempo creo

187
00:19:13,540 --> 00:19:21,140
que con esto han tenido un pantallazo bastante amplio y claro de qué es lo que pueden hacer y cómo hacerlo

188
00:19:21,140 --> 00:19:30,520
y ustedes ahora empezarán a jugar con esta posibilidad porque ustedes ya saben el lenguaje SQL ya conocen

189
00:19:30,520 --> 00:19:39,490
Jaydy SQL ya saben sobre Maisí Colsa saben cómo crear tablas crear campos índices y bueno ahora les

190
00:19:39,490 --> 00:19:41,370
toca elesfuerzo a ustedes.

191
00:19:41,470 --> 00:19:48,790
Espero que les haya gustado esta nueva sección lo que vamos a ver en la próxima sección los he dividido

192
00:19:48,790 --> 00:19:57,610
por secciones y capítulos es todo sobre triggers los disparadores vamos a ver que son como usarlos para

193
00:19:57,610 --> 00:20:04,630
qué nos sirven y también han sido pedido por ustedes así que los he incluido en éste.

194
00:20:04,720 --> 00:20:11,740
En este bonus track que tiene este añadido que ha tenido el curso y bueno estoy muy a gusto con los

195
00:20:11,740 --> 00:20:19,420
comentarios espero que puedan votar y poner buenas reseñas que es lo que le ayuda al curso y bueno ha

196
00:20:19,420 --> 00:20:20,430
sido un placer.

197
00:20:20,440 --> 00:20:22,780
Hasta aquí seguimos en la próxima sección.
