1
00:00:03,390 --> 00:00:04,050
Hola qué tal.

2
00:00:04,050 --> 00:00:11,160
Bienvenidos a este nuevo capítulo del curso completo de base de datos y vamos a ir a nuestro segundo

3
00:00:11,190 --> 00:00:20,430
capítulo de las rutinas almacenadas vamos a ver algo un poquito más más jugoso más completo más nutritivo

4
00:00:20,430 --> 00:00:26,180
digamos porque vamos a aprender más cosas y vamos a dividir este capítulo en dos.

5
00:00:26,250 --> 00:00:34,140
En primer lugar vamos a ver el tema de manejo de errores y luego vamos a ver un ejemplo más de una rutina

6
00:00:34,140 --> 00:00:41,280
almacenada un poquito más completa que la primera que solamente tenía una instrucción así que como no

7
00:00:41,280 --> 00:00:45,830
ameritaba ser un capítulo por cada uno de ellos vamos a unir ambos.

8
00:00:45,870 --> 00:00:53,640
En este capítulo que es el previo a la madre de todas las de todas las rutinas que es la que vamos a

9
00:00:53,640 --> 00:01:00,090
ver en el segundo en el tercer capítulo de esta sección vamos a ver primero el tema de manejo de errores

10
00:01:00,090 --> 00:01:07,170
qué sucede cómo podemos manejar errores dentro de nuestra rutina porque sabemos que el motor chequea

11
00:01:07,170 --> 00:01:13,110
nuestra sintaxis está todo perfecto lograba pero pueden ocurrir errores propios de la integridad de

12
00:01:13,110 --> 00:01:22,240
los datos claves que están duplicadas problemas propios del motor que nos devuelve o no tiene más espacio.

13
00:01:22,250 --> 00:01:29,310
Bueno vamos a saber al menos uno de esos errores y luego la sintaxis es la misma parada para el resto

14
00:01:29,520 --> 00:01:36,540
por lo menos vamos a aprender a manejar errores lo primero que vamos a hacer es ir a nuestra a nuestra

15
00:01:36,540 --> 00:01:45,090
rutina llamada inserto alumnos vamos a hacer click vamos a ver aquí que tenemos nuevas instrucciones

16
00:01:45,090 --> 00:01:53,880
que no hemos visto por ejemplo el declares lo que me permite es crear variables declarar variables declarar

17
00:01:53,880 --> 00:02:03,420
cursores y también declarar manejadores Candler que son los que van a capturar el error lo van a manejar

18
00:02:03,420 --> 00:02:10,620
lo van a le van a dar tratamiento en cuanto encuentren un error en tiempo de ejecución.

19
00:02:10,620 --> 00:02:15,200
La sintaxis es obviamente comienza con declare.

20
00:02:15,360 --> 00:02:23,600
Luego tenemos una cláusula que tiene dos valores posibles continuo o Exit Exit se lo voy a escribir

21
00:02:23,610 --> 00:02:34,040
AQAP por si el audio Exit para qué sirve para decirle al motor bueno en caso de un error continúa ejecutando

22
00:02:34,040 --> 00:02:35,500
lo que hay debajo.

23
00:02:35,930 --> 00:02:44,640
Para que yo pueda manejar mi error y pueda procesarlo y mandar un mensaje formateado por pantalla o

24
00:02:45,270 --> 00:02:50,820
termina la ejecución porque el error que digo es muy grave y no quiero que siga haciendo cosas mi rutina

25
00:02:50,820 --> 00:02:52,420
almacenada.

26
00:02:52,620 --> 00:03:02,420
Esta sentencia SELECT que figura aquí en realidad es parte del error fíjense que en 1062 no hay un puntico

27
00:03:02,650 --> 00:03:09,730
termina aquí la instrucción y esto vendría a ser de esta manera el error 1062 es el error que nos devuelve

28
00:03:09,730 --> 00:03:19,600
el motor cuando detecta que hay una clave duplicada clave duplicada recuérdense que nosotros teníamos

29
00:03:20,090 --> 00:03:25,480
primaría aquí en nuestras tablas y además podíamos tener claves únicas.

30
00:03:25,480 --> 00:03:32,530
Entonces cuando el motor detecta que tanto prima ariki o por una clave única nosotros queremos insertar

31
00:03:32,950 --> 00:03:36,890
un registro que contiene ya un valor que ya existe en la tabla.

32
00:03:37,210 --> 00:03:43,180
Me va a dar error me va a decir no esto ya está este número ya está grabado en la tabla y es único no

33
00:03:43,180 --> 00:03:44,140
puede repetirse.

34
00:03:44,960 --> 00:03:50,040
Ok ahora qué es lo que va a hacer el.

35
00:03:50,360 --> 00:03:57,350
Esta instrucción una vez que lo detecta va a ser lo que yo le coloqué aquí y aquí yo puedo hacer que

36
00:03:57,680 --> 00:04:06,080
me mande por pantalla un mensaje en las rutinas almacenadas cuando yo coloco un Selleck.

37
00:04:06,260 --> 00:04:12,320
Si ese Selleck no tiene un destino hacia una variable más que lo vamos a ver en esta misma y en este

38
00:04:12,320 --> 00:04:18,740
mismo capítulo en el otro ejercicio que vamos a ver me manda lo que yo coloque en la instrucción cel

39
00:04:18,770 --> 00:04:26,300
por pantalla por pantalla o me lo devuelve en la misma en el mismo procedimiento para que yo desde mi

40
00:04:26,300 --> 00:04:37,340
aplicación lo pueda manejar muy bien ahora una vez que detectó esto sigue la ejecución.

41
00:04:37,340 --> 00:04:46,400
En realidad no es que ejecuta primero esto y después esto él el manejador lo que hace es grabarse en

42
00:04:46,400 --> 00:04:50,820
memoria y quedarse esperando esta instrucción no hace nada por sí misma.

43
00:04:50,930 --> 00:04:55,520
Si durante la ejecución de mi rutina no hay ningún error.

44
00:04:55,790 --> 00:05:01,880
Esto no fue más que una mera declaración y una mera información que quedó grabada en memoria y no hizo

45
00:05:01,880 --> 00:05:02,610
nada.

46
00:05:02,630 --> 00:05:09,980
Ahora sí cuando continúa detecta que tengo una instrucción que generó esta excepción.

47
00:05:10,160 --> 00:05:17,600
Esto se va a disparar automáticamente y a partir de ahí va a operar y va a ser lo que yo le coloque

48
00:05:17,600 --> 00:05:18,600
aquí.

49
00:05:19,250 --> 00:05:25,510
Lo que nosotros estamos haciendo en esta rutina almacenada es tratar de insertar un registro en alumno

50
00:05:26,600 --> 00:05:33,430
invitado de alumnos tiene como valor dos parámetros que están aquí yo le estoy pasando por parametro

51
00:05:33,550 --> 00:05:36,950
el Aydin de alumno y el nombre del alumno.

52
00:05:37,070 --> 00:05:46,840
Muy bien ahora vamos a ir a nuestra tabla alumnos no vamos a grabar eso si vamos a robar bueno algo

53
00:05:46,840 --> 00:05:47,880
me decía no tenía grabar

54
00:05:50,650 --> 00:06:01,430
vamos a nuestra tabla alumnos vemos que tenemos tres registros tenemos el 1 el 3 y el 4 vamos a insertar

55
00:06:01,430 --> 00:06:03,890
el registro número 2.

56
00:06:04,070 --> 00:06:07,820
Entonces lo que tenemos que hacer es ir.

57
00:06:08,300 --> 00:06:13,150
Aquí tenemos nuestra Kila termina grabando no sé por qué me apareció.

58
00:06:13,480 --> 00:06:20,660
Hay cosas que por ahí el G10 se vuelve a veces tiene esas cositas que da esos mensajes no se preocupen

59
00:06:20,660 --> 00:06:22,450
que todo está bien.

60
00:06:23,150 --> 00:06:27,920
Vamos a hacer un llamado a nuestra rutina inserto a alumnos

61
00:06:32,760 --> 00:06:44,280
y entre paréntesis vamos a colocar Obviamente nuestro dildos y lo vamos a llamar Marcos.

62
00:06:44,670 --> 00:06:54,070
Un tema importante que quiero explicarles fíjense que nosotros estamos forzando al motor a que coloque

63
00:06:54,070 --> 00:06:58,380
la prima ariki que nosotros estamos indicando ahora por parametro.

64
00:06:59,140 --> 00:07:04,370
Yo les expliqué que no hacía falta incluir las primas ariki en nuestras inserciones.

65
00:07:04,360 --> 00:07:04,820
Por qué.

66
00:07:05,140 --> 00:07:12,460
Porque al ser auto incremental el motor solamente se ocupa de incrementar el número de próximo alumno

67
00:07:12,460 --> 00:07:15,130
y lograba que no haga falta.

68
00:07:15,130 --> 00:07:18,730
No significa que no se pueda sea que no haga falta.

69
00:07:18,860 --> 00:07:22,020
Es bueno no no tienen la necesidad de hacerlo.

70
00:07:22,160 --> 00:07:28,700
Ahora si ustedes lo hacen si ustedes le dicen al motor que más allá de el auto incremental y más allá

71
00:07:28,700 --> 00:07:33,900
de que ya lleva una numeración ustedes le fuerzan un número.

72
00:07:33,950 --> 00:07:40,610
El motor se los va a tomar igual y no importa si el dato que le están dando a ustedes es el próximo

73
00:07:40,610 --> 00:07:42,040
número libre.

74
00:07:42,140 --> 00:07:45,870
Ustedes les pueden saltear cien números a los alumnos.

75
00:07:45,980 --> 00:07:51,980
Puede venir que el próximo alumno disponible es el número cinco y ustedes pueden decirle que quieren

76
00:07:51,980 --> 00:07:55,900
insertar el 105 por ejemplo.

77
00:07:56,150 --> 00:08:01,830
No hay ningún problema el motor lo respeta y a partir de ese número continúa el auto incremental.

78
00:08:03,050 --> 00:08:11,200
Así que por eso sólo quería explicarles esto porque bueno en las clases anteriores me maté diciéndole

79
00:08:11,200 --> 00:08:12,740
que no hace falta no hace falta.

80
00:08:12,740 --> 00:08:20,120
Bueno en este caso lo vamos a forzar para que para poder forzar una clave duplicada vamos a ejecutar

81
00:08:20,120 --> 00:08:28,040
esto y me aparece un no es un error es una advertencia que tiene que ver con el colación con el tipo

82
00:08:28,040 --> 00:08:31,620
de letra que es si quiero convertir el VF.

83
00:08:31,640 --> 00:08:40,720
Esto no le presten atención porque no estamos haciendo nada raro simplemente estamos insertando un registro

84
00:08:40,730 --> 00:08:50,550
vamos a nuestra tabla alumnos y vemos que ya tenemos a Marcos flamante alumno número dos uno dos tres

85
00:08:50,550 --> 00:08:54,810
cuatro aquí tenemos completado el grupo muy bien.

86
00:08:54,810 --> 00:08:56,180
Ahora qué ocurre.

87
00:08:57,430 --> 00:09:04,750
Si yo lo vuelvo a ejecutar porque mi prima ariki no puede repetirse no puedo volver a ingresar el número

88
00:09:04,750 --> 00:09:14,010
dos si lo ejecuto me aparece el mensaje de clave duplicada fíjense el nuestro.

89
00:09:14,260 --> 00:09:23,290
Nuestra rutina almacenada que cuando el Candler el manejador de error detectó el código 1062 en lugar

90
00:09:23,290 --> 00:09:31,300
de aparecer un error horrible de los que aparecen en el Jaydy SQL con cãrtel error y demás me permitió

91
00:09:31,330 --> 00:09:34,290
manejar el error y mostrar un mensaje.

92
00:09:34,780 --> 00:09:42,970
Ahora fíjense que el nombre de mi campo es clave duplicada no está bien esto por qué.

93
00:09:43,000 --> 00:09:51,570
Porque yo aquí voy a tener el escandaletes uno por el código 1062 otro por otro código por fin de archivo

94
00:09:51,580 --> 00:09:56,500
no sé depende lo que yo quiera hacer en mi rutina almacenada.

95
00:09:56,500 --> 00:10:04,750
Voy a tener distintos manejadores así que le vamos a colocar un alias para que todos tengan el mismo

96
00:10:05,050 --> 00:10:11,410
alias de salida y yo desde una aplicación pueda detectar lo que le vamos a colocar mensaje a nuestro

97
00:10:11,410 --> 00:10:11,920
alias

98
00:10:16,480 --> 00:10:18,540
porque en definitiva es una instrucción Cele.

99
00:10:18,670 --> 00:10:22,750
Recuerden que lo que aquí coloque aquí le puede poner un alias.

100
00:10:22,750 --> 00:10:30,610
Ahora vamos a grabarlo vamos a ejecutarlo y ahora ya mi campo se llama mensaje.

101
00:10:31,750 --> 00:10:40,000
Entonces si yo tuvieras 20 manejadores de error en una misma rutina a todos les coloco mensaje y el

102
00:10:40,000 --> 00:10:41,370
campo se va a llamar mensaje.

103
00:10:41,380 --> 00:10:47,740
Pero el texto que me va a mostrar va a ser diferente se entiende y esto lo voy a poder manejar desde

104
00:10:47,740 --> 00:10:50,390
mi aplicación de una manera óptima.

105
00:10:50,680 --> 00:10:59,080
Así que bueno bárbaro hemos visto el tema de manejo de errores y vamos a ver nuestra segunda parte de

106
00:10:59,080 --> 00:11:05,610
este capítulo nuestra segunda parte que es esta rutina llamada máxima venta.

107
00:11:05,860 --> 00:11:14,110
Vamos a hacerle click vamos a ir a la rutina y vamos a ver algunas características nuevas para que ustedes

108
00:11:14,110 --> 00:11:22,570
vean cómo va tomando forma cómo se va haciendo más nutritiva nuestra nuestra rutina no va a Chab tiene

109
00:11:22,570 --> 00:11:30,280
más aspecto de procedimiento almacenado y no una simple instrucción insert como fue nuestro primer capítulo.

110
00:11:30,700 --> 00:11:39,970
Bueno vamos a ver algunas cosas yo les dije que declaré me permitía crear variables me permitía crear

111
00:11:39,970 --> 00:11:47,200
cursores me permitía crear manejadores de error y en este caso estamos creando una variable en la sintaxis

112
00:11:47,590 --> 00:11:48,920
es ésta.

113
00:11:49,030 --> 00:11:54,080
Todo comienza con declaré el nombre de la variable el tipo de dato.

114
00:11:54,280 --> 00:12:00,610
Si eligen decimal es muy importante que le coloquen la longitud.

115
00:12:00,640 --> 00:12:06,940
Si no colocan la longitud no les va a dar error se los va a tomar pero cuando quieran hacer una operación

116
00:12:06,940 --> 00:12:14,260
con esa variable les va a aparecer un error de que tiene que truncar los datos porque el valor que quieren

117
00:12:14,260 --> 00:12:19,510
alojar ahí es más largo de lo que han declarado.

118
00:12:19,510 --> 00:12:27,560
Esto es muy importante háganlo así van a evitar errores y tiempo coloquen lo que ustedes deseen.

119
00:12:27,600 --> 00:12:29,780
Escamados 5,3.

120
00:12:29,830 --> 00:12:41,050
Lo que ustedes deseen y luego tenemos un 7-O en cero de esa variable la ponemos en cero en rutinas almacenadas

121
00:12:41,140 --> 00:12:49,870
de mi ciclo se usa la instrucción C.T es un error de sintaxis hacer esto que solamente quede valor máximo

122
00:12:49,870 --> 00:12:51,160
igual a cero.

123
00:12:51,520 --> 00:13:00,560
Si bien en la mayoría de los lenguajes se hace así en mi ciclo no hay que usar sí o sí el set para todo

124
00:13:00,560 --> 00:13:08,720
lo que tiene que ver con asignar valores se usa el otro aspecto importante es que los declares van al

125
00:13:08,720 --> 00:13:14,420
comienzo del Wiggin luego vienen el resto de las instrucciones.

126
00:13:14,420 --> 00:13:21,150
Yo no puedo declarar variables en el medio del código no puedo declarar mi cursores ni manejadores.

127
00:13:21,320 --> 00:13:29,000
En un orden que no sea al comienzo de toda la rutina esto es algo que tienen que saber y respetar y

128
00:13:29,000 --> 00:13:36,900
luego lo que tenemos aquí es una particularidad es una particularidad porque parece ser una sentencia

129
00:13:36,900 --> 00:13:38,210
C.L. normal.

130
00:13:38,220 --> 00:13:41,040
Sin embargo tiene algo diferente.

131
00:13:41,040 --> 00:13:49,290
Tenemos un Celes que me va a traer la cantidad máxima el valor máximo de ventas total o sea va a recordar

132
00:13:49,290 --> 00:13:52,200
mis facturas y va a traerme el valor máximo.

133
00:13:52,230 --> 00:13:58,980
Cuál fue la factura de mayor valor que yo hice de mi tabla ventas pero qué sucede.

134
00:13:58,980 --> 00:14:05,280
El resultado no me lo va a mostrar por pantalla el resultado lo va a grabar en una variable este InTouch

135
00:14:06,390 --> 00:14:14,190
valor máximo lo que le está diciendo es que el resultado de ese campo al resultado de este cálculo de

136
00:14:14,190 --> 00:14:22,590
esta función arãvalo en valor máximo y esto yo podría tener l@ variables y separados por comas traer

137
00:14:22,650 --> 00:14:31,370
otro campo y ponerle InTouch otra variable y así sucesivamente y podría leer todo un registro podría

138
00:14:31,370 --> 00:14:40,110
traer todo un registro de una tabla y grabar cada campo en mí en mis variables.

139
00:14:40,110 --> 00:14:45,870
Vamos a ver en el capítulo siguiente cómo lo podemos hacer más complejo van a ver cómo nos traemos tres

140
00:14:45,870 --> 00:14:55,760
campos de una tabla y hacemos operaciones van a ver lo fácil que es una vez que lo grabó en la variable

141
00:14:56,430 --> 00:15:07,230
nosotros tenemos una bloque de sentencias de condición el famoso if if then para saber una condición

142
00:15:08,150 --> 00:15:15,240
y nosotros tenemos que una instrucción que nos dice que si el valor máximo supera los mil pesos o los

143
00:15:15,240 --> 00:15:19,960
1000 voy a mostrar por pantalla en un campo.

144
00:15:20,010 --> 00:15:28,110
Aquí fíjense que está el alias igual que en el ejercicio anterior en un campo mensaje voy a mostrar

145
00:15:28,110 --> 00:15:33,260
el texto que dice se superaron los mil por qué.

146
00:15:33,290 --> 00:15:40,670
Porque lo que quiero saber en esta rutina almacenada es si yo logré superar un monto determinado de

147
00:15:40,680 --> 00:15:49,230
factura y si no me va a parecer aún no superamos los 1000 y todo lo va a grabar en el alias de mensaje

148
00:15:50,380 --> 00:15:52,210
esta rutina no tiene parámetros.

149
00:15:52,210 --> 00:15:54,290
No le estoy pasando ningún parámetro.

150
00:15:54,370 --> 00:16:05,080
Simplemente está ejecutando esto y vamos a ver cómo funciona vamos a venir aquí vamos a colocar

151
00:16:09,880 --> 00:16:15,010
máxima venta.

152
00:16:15,010 --> 00:16:16,620
Abro y cierro paréntesis.

153
00:16:16,660 --> 00:16:23,890
Recuerden que aunque no tenga parámetros hay que hacerlo así y lo ejecuto y el mensaje me dice se superaron

154
00:16:23,890 --> 00:16:32,920
los mil pesos porque realmente tengo facturas de mucho más de mil pesos ahora fíjense esto esto es lo

155
00:16:32,920 --> 00:16:38,860
que ustedes tienen que aprender las posibilidades ustedes tienen que aprender el abanico de posibilidades

156
00:16:39,730 --> 00:16:47,140
puedo hacerlo de esta manera puedo grabar un valor máximo puedo tener variables puedo aceptar esas variables

157
00:16:47,380 --> 00:16:55,740
puedo preguntar por esas variables y dependiendo del valor hacer determinadas cosas van a ver después

158
00:16:55,740 --> 00:17:05,280
qué tenemos no solo I.V tenemos cais tenemos EDUS Weyl tenemos Lobb tenemos repeat tenemos muchas muchas

159
00:17:05,370 --> 00:17:14,380
estructuras de bucle de condicionamiento que podemos usar en nuestras rutinas almacenadas no vamos a

160
00:17:14,380 --> 00:17:15,240
saber todas.

161
00:17:15,240 --> 00:17:21,090
Vamos a ver un par porque luego esto es un puntapié inicial para que ustedes vean lo que se pueda hacer

162
00:17:21,270 --> 00:17:28,200
y cómo hacerlo y luego cambiar una instrucción por otra existe muchísima documentación para hacerlo

163
00:17:28,200 --> 00:17:35,530
y tampoco podemos hacer una sección de 10 horas dedicado exclusivamente a rutinas almacenada.

164
00:17:35,880 --> 00:17:43,200
Bueno esto es el fin del segundo ejercicio del segundo capítulo y los espero en el próximo capítulo

165
00:17:43,200 --> 00:17:48,210
y vamos a ver algo mucho más complejo y mucho más completo.

166
00:17:48,210 --> 00:17:56,220
Realmente van a sentirse a gusto con lo que van a terminar viendo de lo que son las rutinas almacenadas

167
00:17:56,220 --> 00:17:58,820
así que nos vemos en el próximo capítulo.
