En este artículo, explicaré el uso de las tablas %SQL_Diag.Result y %SQL_Diag.Message junto con la nueva funcionalidad LOAD DATA.
Se recomienda revisar primero la documentación LOAD DATA.
Después del éxito de una operación, LOAD DATA inserta un registro en la tabla %SQL_Diag.Result y los detalles se insertan en la tabla %SQL_Diag.Message
A continuación se muestra el comando básico cuando la tabla ya está creada y el archivo de origen no contiene una fila de encabezado.
LOAD DATA FROM FILE 'C://TEMP/mydata.txt' INTO MyTable
El nombre del archivo debe incluir un sufijo .txt o .csv (valores separados por comas) y tanto el origen como el destino tienen la misma secuencia de columnas de datos.
Cargando desde el origen del archivo: Encabezado (Header)
Para especificar que el archivo de datos tiene una fila de encabezado, usa el parámetro booleano de encabezado, como se muestra en el siguiente ejemplo:
LOAD DATA FROM FILE 'C://TEMP/mydata.txt' INTO Sample.Employees USING {"from":{"file":{"header":"1"}}}
Estoy usando el mismo comando en mi aplicación Medical Datasets
SET qry = "LOAD DATA FROM FILE '"_filename_"' INTO "_tableName_ " "_"USING {""from"":{""file"":{""header"":""1""}}}"
SET rset = ##class(%SQL.Statement).%ExecDirect(,qry)
Aquí filename es una ruta de archivo completa y tableName es un nombre de tabla donde se deben cargar los datos.
Registro %SQL_Diag
Después de cada operación exitosa, LOAD DATA insertará un registro en las tablas %SQL_Diag.Result y %SQL_Diag.Message.
Tabla %SQL_Diag.Result
A continuación se muestra la estructura de %SQL_Diag.Result
Para obtener los detalles, necesitamos obtener el ID máximo de la tabla %SQL_Diag.Result después de la operación LOAD DATA.
A continuación se muestra el comando SQL para obtener la ID máxima:
SET qry = "SELECT id FROM %SQL_Diag.Result WHERE ID = (SELECT MAX(ID) FROM %SQL_Diag.Result )"
Supongamos que la selección de MAX (ID) devuelve 5 de la tabla %SQL_Diag.Result que demostré en la vista previa de mi aplicación en Open Exchange.
Podemos usar Management Portal SQL o $SYSTEM.SQL.Shell() para ver los detalles
SELECT * FROM %SQL_Diag.Result WHERE ID = 5
Tabla %SQL_Diag.Message
En caso de errores, el sistema guarda el número de errores en la columna de recuento de errores de la tabla %SQL.Diag.Result.
Estos errores se pueden ver en la tabla %SQL_Diag.Message usando %SQL.Diag.Result ID contra la columna %SQL_Diag.Message diagResult.
A continuación se muestra la estructura de la tabla %SQL_Diag.Message
A continuación se muestra el comando para revisar los detalles de los errores:
SELECT * FROM %SQL_Diag.Message WHERE severity = 'error' and diagResult = 5
%SQL_Diag.Message muestra los detalles de los errores.