Quiero registrar un error que ocurre en el procedimiento almacenado:
catch (ERROR) { snowflake.execute({sqlText: sql_update_log_command, binds: [RUN_ID, PROCESS_ID,'error', 0, ERROR.message] }); return "Failed: " + ERROR.message; }sql_update_log_command ejecuta el procedimiento "update_process_log" y vincula esos 5 argumentos. Pero, cuando ocurre un error, las columnas que deberían contener un mensaje de error permanecen vacías. El error fue algo como esto:
"Error: no se reconoce el valor numérico '$METADATA$FILE_ROW_NUMBER' Archivo 'data/stage/20220104/user_activity/20220104-172435475.csv.gz', línea 2, carácter 1 Fila 1, columna $METADATA$FILE_ROW_NUMBER Si desea para continuar cargando cuando se encuentre un error, use otros valores como 'SKIP_FILE' o 'CONTINUE' para la opción ON_ERROR. Para obtener más información sobre las opciones de carga, ejecute 'info loading_data' en un cliente SQL".
Firma del procedimiento "update_process_log":
create or replace procedure metadata.update_process_log( RUN_ID FLOAT, PROCESS_ID FLOAT, PROCESS_STATUS VARCHAR, NUM_OF_RECORDS FLOAT, ERROR_MSG VARCHAR) returns string language javascript¿Parece que el signo de dólar $ está creando un problema? ¿Cómo se puede manejar esto?
Encontré una solución en esta pregunta: Snowflake trabaja con un procedimiento almacenado en el manejo de errores
Básicamente, debe escapar de las comillas simples antes de registrar filas:
err.message.replace( /'/g , "''" )