
As you know Snowflake chose to use Javascript as the compositional language for expressing your logic. Troubleshooting JS has been challenging for us so Snowflake has come up with a better mechanism for enabling logging. However, The error handling in Stored procedure (using Javascript) can be implemented using JavaScript Try/Catch.
Similarly, Users in all clouds and all regions can now use Snowflake’s new stored procedure language to:
- 
Implement and invoke complex business logic, such as ETL procedures, in an easier and more modern language within Snowflake to support arrays, exceptions, control structures, and garbage collection—to name a few relevant language attributes 
- 
Deploy well-known access control primitives without the need to manage an external environment 
- 
Build and run dynamic SQL 
- 
In conclusion, Do all of the above with seamless support for both structured and semi-structured data 
Stored Procedures Introduction:
With the introduction of Snowflake’s stored procedures, users will be able to:
- 
Use a first-class SQL object (procedure) along with the corresponding DDL statements 
- 
Grant schema privileges on stored procedures 
- 
Make use of procedural logic via IF/ELSE statements 
- 
Moreover, Iterate over result sets 
- 
Finally Implement error handling via TRY/CATCH 
- Use the caller’s rights stored procedure to run all the supported SQL as the current user
Firstly, Error logging table to be created which will hold the Erroneous data:
CREATE OR REPLACE TABLE error_log (error_code number, error_state string, error_message string, stack_trace string);
Finally, JavaScript procedure implementing Error handling using TRY/CATCH exception clause:
CREATE OR REPLACE PROCEDURE broken()
RETURNS varchar
NOT NULL
LANGUAGE javascript
AS $$
var result;
try {
snowflake.execute({ sqlText: “Invalid Command!;” });
result = “Succeeded”;
} catch (err) {
result = “Failed”;
snowflake.execute({
sqlText: `insert into error_log VALUES (?,?,?,?)`
,binds: [err.code, err.state, err.message, err.stackTraceTxt]
});
}
return result;
$$;
Finally call the procedure..
call broken();

 
                                                                             
                                                                             
                                                                             
                                                                             
                                                                             
                                 
                                 
                                 
                                 
                                