Bienvenidos sean a este post, hoy hablaremos sobre este comando.
En el post anterior mencionamos dos comandos para ver el area de diagnostico, uno es SHOW WARNINGS y el otro es GET DIAGNOSTICS, hoy nos centraremos en este segundo pero cual es la diferencia entre ambos? Basicamente que este comando nos permite tener una mejor estructura del area de diagnostico dado que nos permite copiar cada valor en una variable, si bien posee una sintaxis detallada y propensa a errores es la unica forma de poder analizar el area de diagnosticos dentro de un programa almacenado, de hecho SHOW WARNINGS devuelve un conjunto de resultados al usuario pero no permite al codigo SQL acceder a este, para entender este concepto vamos a analizar algunos de los ejemplos anteriores, comencemos primero ejecutando este comando:
MariaDB [(none)]> set sql_mode='x';
El cual sabemos que nos devolvera un error por no poder asignar dicho valor, luego ejecutaremos el siguiente comando:
MariaDB [(none)]> resignal;
El cual nos devolvera otro error pero como vimos en el post anterior al haber sido escrito correctamente y no haber afectado a ninguna tabla se seguira acumulando en el area de diagnosticos, ahora vamos a trabajar con nuestro nuevo comando y para ello ejecutaremos lo siguiente:
MariaDB [(none)]> get diagnostics @numero_errores = NUMBER;
En este caso le decimos que en la variable numero_errores almacena el numero de condiciones que existen en el area de diagnosticos, ejecutemos un select para ver su valor:
MariaDB [(none)]> select @numero_errores;
+-----------------+
| @numero_errores |
+-----------------+
| 2 |
+-----------------+
1 row in set (0.001 sec)
MariaDB [(none)]>
Aqui podemos ver como nos devolvio la cantidad que tenemos y nos dio la posibilidad de almacenarlos en una variable para que podamos utilizar en cualquier otro codigo, veamos otro ejemplo y para ello ejecutaremos el siguiente comando:
MariaDB [(none)]> get diagnostics condition 1
-> @sqlstate = RETURNED_SQLSTATE,
-> @errno = MYSQL_ERRNO,
-> @error = MESSAGE_TEXT;
En este caso le decimos que tome la condicion identificada con el valor de 1 y en las variables sqlstate, errno y error almacene a RETURNED_SQLSTATE (devuelve el valor de sqlstate), MYSQL_ERRNO (devuelve el codigo de error) y MESSAGE_TEXT (devuelve la descripcion del error) respectivamente, al igual que en el caso anterior podemos usar nuevamente a SELECT para obtener los valores de estas tres variables:
MariaDB [(none)]> select @sqlstate, @errno, @error;
+-----------+--------+------------------------------------------------------+
| @sqlstate | @errno | @error |
+-----------+--------+------------------------------------------------------+
| 42000 | 1231 | Variable 'sql_mode' can't be set to the value of 'x' |
+-----------+--------+------------------------------------------------------+
1 row in set (0.001 sec)
Como pueden ver ahora tambien disponemos de una descripcion que podemos utilizar en otros codigos sobre una condicion almacenada en el area, si varian el valor de la condicion y vuelven a guardar los datos y vuelven a verlos con SELECT tendremos lo siguiente:
MariaDB [(none)]> select @sqlstate, @errno, @error;
+-----------+--------+----------------------------------+
| @sqlstate | @errno | @error |
+-----------+--------+----------------------------------+
| 0K000 | 1645 | RESIGNAL when handler not active |
+-----------+--------+----------------------------------+
1 row in set (0.001 sec)
MariaDB [(none)]>
Y esto podran hacerlo con todas las condiciones que se encuentran dentro del area, permitiendonos tener un mejor control sobre la informacion almacenada facilitando nuestra tarea a la hora de una depuracion.
En resumen, hoy hemos visto a GET DIAGNOSTICS, como es, para que sirve, que facilidades nos brinda, como podemos utilizarlo para almacenar la informacion devuelta por el mismo y como nos puede ser util para una depuracion mas exacta, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
