Pregunta
Mathew Lambert · Ene 13

Como verificar SQL PurgeForTable ha ido mal

¿Alguien sabe si hay una manera fácil de saber si la ejecución del comando $ System.SQL.PurgeForTable ha ido bien / mal?

La documentación describe que se devuelve un string, pero de hecho hay un bonito  Quit ""  en el código.

¿Quizás dentro de PurgeForTable ^% apiSQL hay alguna variable de proceso establecida cuando va bien / mal?

¡Muchas gracias!

00
0 0 3 38
Log in or sign up to continue

Hola Mathew,

ese método no devuelve ninguna información ni en caso de error ni de éxito... como bien dices, siempre retorna "".

Una opción perfectamente válida para verificar (sugerida por Anderson Negrelli) sería usar:

##class(%Library.SQLCatalog).GetCachedQueryTableCount("table_name")

Este comando devuelve el número de consultas cacheadas de una tabla y te permite comprobar si todas las consultas cacheadas se han purgado.

Hola Salva!

Como he comentado en el post en inglés, en un entorno productivo esto no nos sirve ya que inmediatamente después ya tenemos queries cacheadas.

El tema es que hasta ahora después de este comando teníamos un If ($ZERROR '= "") y en realidad no se si esto llegaba a hacer algo, sería interesante que alguien nos confirmase si dentro del código de PurgeForTable^%apiSQL se setea $ZERROR, %objlasterror, o alguna otra cosa.

Hola Mathew,

Sí. Si hay un error interno en alguna de las llamadas que hace para localizar la tabla y hacer el purgado, el error podría aparecer en $ZERROR. No obstante, hay varias llamadas a métodos internos... no me ha parecido, pero alguno de ellos podría poner a "" el $ZERROR si gestiona el error y considera que debe ponerlo a null. He seguido la cadena de llamadas hasta 3 o 4 niveles y no he visto ningún set $ZE="" explícito... o sea que en principio, si hay algún error interno tras la llamada, $ZE o %objlasterror deberían tener algún valor....

OJO, esto no implica necesariamente que la operación de purgado haya fallado... algún metodo o rutina intermedia puede lanzar una excepción (lo que modificaría el $ZE), que a su vez podría ser gestionada por algún método/rutina del nivel superior sin mayor problema y sin afectar a la acción de purgado. No creo que sea así en este caso, pero podría ocurrir.